< prev index next >
src/hotspot/share/runtime/thread.cpp
Print this page
*** 385,395 ****
JFR_ONLY(Jfr::on_thread_start(this);)
log_debug(os, thread)("Thread " UINTX_FORMAT " stack dimensions: "
PTR_FORMAT "-" PTR_FORMAT " (" SIZE_FORMAT "k).",
! os::current_thread_id(), p2i(stack_base() - stack_size()),
p2i(stack_base()), stack_size()/1024);
// Perform <ChildClass> initialization actions
DEBUG_ONLY(_run_state = PRE_RUN;)
this->pre_run();
--- 385,395 ----
JFR_ONLY(Jfr::on_thread_start(this);)
log_debug(os, thread)("Thread " UINTX_FORMAT " stack dimensions: "
PTR_FORMAT "-" PTR_FORMAT " (" SIZE_FORMAT "k).",
! os::current_thread_id(), p2i(stack_end()),
p2i(stack_base()), stack_size()/1024);
// Perform <ChildClass> initialization actions
DEBUG_ONLY(_run_state = PRE_RUN;)
this->pre_run();
*** 1016,1043 ****
InterfaceSupport::check_gc_alot();
}
}
#endif // ASSERT
bool Thread::is_in_stack(address adr) const {
assert(Thread::current() == this, "is_in_stack can only be called from current thread");
address end = os::current_stack_pointer();
! // Allow non Java threads to call this without stack_base
! if (_stack_base == NULL) return true;
! if (stack_base() > adr && adr >= end) return true;
!
! return false;
! }
!
! bool Thread::is_in_usable_stack(address adr) const {
! size_t stack_guard_size = os::uses_stack_guard_pages() ? JavaThread::stack_guard_zone_size() : 0;
! size_t usable_stack_size = _stack_size - stack_guard_size;
!
! return ((adr < stack_base()) && (adr >= stack_base() - usable_stack_size));
}
-
// We had to move these methods here, because vm threads get into ObjectSynchronizer::enter
// However, there is a note in JavaThread::is_lock_owned() about the VM threads not being
// used for compilation in the future. If that change is made, the need for these methods
// should be revisited, and they should be removed if possible.
--- 1016,1032 ----
InterfaceSupport::check_gc_alot();
}
}
#endif // ASSERT
+ // Check for adr in the live portion of our stack.
bool Thread::is_in_stack(address adr) const {
assert(Thread::current() == this, "is_in_stack can only be called from current thread");
address end = os::current_stack_pointer();
! return (stack_base() > adr && adr >= end);
}
// We had to move these methods here, because vm threads get into ObjectSynchronizer::enter
// However, there is a note in JavaThread::is_lock_owned() about the VM threads not being
// used for compilation in the future. If that change is made, the need for these methods
// should be revisited, and they should be removed if possible.
*** 1828,1837 ****
--- 1817,1834 ----
bool JavaThread::reguard_stack(void) {
return reguard_stack(os::current_stack_pointer());
}
+ // Check for adr in the usable portion of this thread's stack.
+ bool JavaThread::is_in_usable_stack(address adr) const {
+ size_t stack_guard_size = os::uses_stack_guard_pages() ? JavaThread::stack_guard_zone_size() : 0;
+ size_t usable_stack_size = _stack_size - stack_guard_size;
+
+ return ((stack_base() > adr) && (adr >= (stack_base() - usable_stack_size)));
+ }
+
void JavaThread::block_if_vm_exited() {
if (_terminated == _vm_exited) {
// _vm_exited is set at safepoint, and Threads_lock is never released
// we will block here forever.
// Here we can be doing a jump from a safe state to an unsafe state without
< prev index next >