< prev index next >

src/hotspot/share/compiler/compileBroker.cpp

Print this page

        

*** 1779,1803 **** CodeCache::free(thread->get_buffer_blob()); } return; // Stop this thread. } } ! continue; ! } ! ! if (UseDynamicNumberOfCompilerThreads) { ! possibly_add_compiler_threads(); ! } // Give compiler threads an extra quanta. They tend to be bursty and // this helps the compiler to finish up the job. if (CompilerThreadHintNoPreempt) { os::hint_no_preempt(); } // Assign the task to the current thread. Mark this compilation // thread as active for the profiler. CompileTaskWrapper ctw(task); nmethodLocker result_handle; // (handle for the nmethod produced by this task) task->set_code_handle(&result_handle); methodHandle method(thread, task->method()); --- 1779,1800 ---- CodeCache::free(thread->get_buffer_blob()); } return; // Stop this thread. } } ! } else { // Give compiler threads an extra quanta. They tend to be bursty and // this helps the compiler to finish up the job. if (CompilerThreadHintNoPreempt) { os::hint_no_preempt(); } // Assign the task to the current thread. Mark this compilation // thread as active for the profiler. + // CompileTaskWrapper also keeps the Method* from being deallocated if redefinition + // occurs after fetching the compile task off the queue. CompileTaskWrapper ctw(task); nmethodLocker result_handle; // (handle for the nmethod produced by this task) task->set_code_handle(&result_handle); methodHandle method(thread, task->method());
*** 1811,1820 **** --- 1808,1822 ---- // After compilation is disabled, remove remaining methods from queue method->clear_queued_for_compilation(); task->set_failure_reason("compilation is disabled"); } } + + if (UseDynamicNumberOfCompilerThreads) { + possibly_add_compiler_threads(); + } + } } // Shut down compiler runtime shutdown_compiler_runtime(thread->compiler(), thread); }
< prev index next >