提交 c6e26dc7 编写于 作者: Z zgu

8016074: NMT: assertion failed: assert(thread->thread_state() == from) failed:...

8016074: NMT: assertion failed: assert(thread->thread_state() == from) failed: coming from wrong thread state
Summary: Uses os::NakedYield() on Solaris instead of os::yield_all()
Reviewed-by: acorn, coleenp, hseigel
上级 f05a4578
......@@ -470,7 +470,21 @@ class MemTracker : AllStatic {
static void check_NMT_load(Thread* thr) {
assert(thr != NULL, "Sanity check");
if (_slowdown_calling_thread && thr != _worker_thread) {
#ifdef _WINDOWS
// On Windows, os::NakedYield() does not work as well
// as os::yield_all()
os::yield_all();
#else
// On Solaris, os::yield_all() depends on os::sleep()
// which requires JavaTherad in _thread_in_vm state.
// Transits thread to _thread_in_vm state can be dangerous
// if caller holds lock, as it may deadlock with Threads_lock.
// So use NaKedYield instead.
//
// Linux and BSD, NakedYield() and yield_all() implementations
// are the same.
os::NakedYield();
#endif
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册