< prev index next >

src/hotspot/share/runtime/sweeper.cpp

Print this page
rev 51807 : imported patch nmethod-marking.patch
rev 51808 : 8132849: Increased stop time in cleanup phase because of single-threaded walk of thread stacks in NMethodSweeper::mark_active_nmethods()
rev 51809 : [mq]: JDK-8132849-01.patch

*** 245,254 **** --- 245,263 ---- } } } CodeBlobClosure* NMethodSweeper::prepare_mark_active_nmethods() { + #ifdef ASSERT + if (ThreadLocalHandshakes) { + assert(Thread::current()->is_Code_cache_sweeper_thread(), "must be executed under CodeCache_lock and in sweeper thread"); + assert_lock_strong(CodeCache_lock); + } else { + assert(SafepointSynchronize::is_at_safepoint(), "must be executed at a safepoint"); + } + #endif + // If we do not want to reclaim not-entrant or zombie methods there is no need // to scan stacks if (!MethodFlushing) { return NULL; }
*** 293,303 **** */ void NMethodSweeper::do_stack_scanning() { assert(!CodeCache_lock->owned_by_self(), "just checking"); if (wait_for_stack_scanning()) { if (ThreadLocalHandshakes) { ! CodeBlobClosure* code_cl = prepare_mark_active_nmethods(); if (code_cl != NULL) { ThreadToCodeBlobClosure tcl(code_cl); Handshake::execute(&tcl); } } else { --- 302,316 ---- */ void NMethodSweeper::do_stack_scanning() { assert(!CodeCache_lock->owned_by_self(), "just checking"); if (wait_for_stack_scanning()) { if (ThreadLocalHandshakes) { ! CodeBlobClosure* code_cl; ! { ! MutexLockerEx ccl(CodeCache_lock, Mutex::_no_safepoint_check_flag); ! code_cl = prepare_mark_active_nmethods(); ! } if (code_cl != NULL) { ThreadToCodeBlobClosure tcl(code_cl); Handshake::execute(&tcl); } } else {
< prev index next >