Mercurial > hg > truffle
comparison src/share/vm/memory/sharedHeap.cpp @ 7179:d0aa87f04bd5
8003720: NPG: Method in interpreter stack frame can be deallocated
Summary: Pass down a closure during root scanning to keep the class of the method alive.
Reviewed-by: coleenp, jcoomes
author | stefank |
---|---|
date | Tue, 27 Nov 2012 10:13:20 +0100 |
parents | da91efe96a93 |
children | be4d5c6c1f79 |
comparison
equal
deleted
inserted
replaced
7178:19c1bd641922 | 7179:d0aa87f04bd5 |
---|---|
152 } | 152 } |
153 // Global (strong) JNI handles | 153 // Global (strong) JNI handles |
154 if (!_process_strong_tasks->is_task_claimed(SH_PS_JNIHandles_oops_do)) | 154 if (!_process_strong_tasks->is_task_claimed(SH_PS_JNIHandles_oops_do)) |
155 JNIHandles::oops_do(roots); | 155 JNIHandles::oops_do(roots); |
156 // All threads execute this; the individual threads are task groups. | 156 // All threads execute this; the individual threads are task groups. |
157 CLDToOopClosure roots_from_clds(roots); | |
158 CLDToOopClosure* roots_from_clds_p = (is_scavenging ? NULL : &roots_from_clds); | |
157 if (ParallelGCThreads > 0) { | 159 if (ParallelGCThreads > 0) { |
158 Threads::possibly_parallel_oops_do(roots, code_roots); | 160 Threads::possibly_parallel_oops_do(roots, roots_from_clds_p ,code_roots); |
159 } else { | 161 } else { |
160 Threads::oops_do(roots, code_roots); | 162 Threads::oops_do(roots, roots_from_clds_p, code_roots); |
161 } | 163 } |
162 if (!_process_strong_tasks-> is_task_claimed(SH_PS_ObjectSynchronizer_oops_do)) | 164 if (!_process_strong_tasks-> is_task_claimed(SH_PS_ObjectSynchronizer_oops_do)) |
163 ObjectSynchronizer::oops_do(roots); | 165 ObjectSynchronizer::oops_do(roots); |
164 if (!_process_strong_tasks->is_task_claimed(SH_PS_FlatProfiler_oops_do)) | 166 if (!_process_strong_tasks->is_task_claimed(SH_PS_FlatProfiler_oops_do)) |
165 FlatProfiler::oops_do(roots); | 167 FlatProfiler::oops_do(roots); |