comparison src/share/vm/code/nmethod.cpp @ 1577:852d0157c696

6956931: assert(SafepointSynchronize::is_at_safepoint()) failed: must be executed at a safepoint Reviewed-by: kvn, dcubed
author never
date Wed, 02 Jun 2010 14:23:23 -0700
parents 1a5913bf5e19
children e9ff18c4ace7
comparison
equal deleted inserted replaced
1576:4a2e260bb13a 1577:852d0157c696
1340 1340
1341 // zombie only - if a JVMTI agent has enabled the CompiledMethodUnload event 1341 // zombie only - if a JVMTI agent has enabled the CompiledMethodUnload event
1342 // and it hasn't already been reported for this nmethod then report it now. 1342 // and it hasn't already been reported for this nmethod then report it now.
1343 // (the event may have been reported earilier if the GC marked it for unloading). 1343 // (the event may have been reported earilier if the GC marked it for unloading).
1344 if (state == zombie) { 1344 if (state == zombie) {
1345 1345 post_compiled_method_unload();
1346 DTRACE_METHOD_UNLOAD_PROBE(method());
1347
1348 if (JvmtiExport::should_post_compiled_method_unload() &&
1349 !unload_reported()) {
1350 assert(method() != NULL, "checking");
1351 {
1352 HandleMark hm;
1353 JvmtiExport::post_compiled_method_unload_at_safepoint(
1354 method()->jmethod_id(), code_begin());
1355 }
1356 set_unload_reported();
1357 }
1358 } 1346 }
1359 1347
1360 1348
1361 // Zombie only stuff 1349 // Zombie only stuff
1362 if (state == zombie) { 1350 if (state == zombie) {
1504 JvmtiExport::post_compiled_method_load(this); 1492 JvmtiExport::post_compiled_method_load(this);
1505 } 1493 }
1506 } 1494 }
1507 1495
1508 void nmethod::post_compiled_method_unload() { 1496 void nmethod::post_compiled_method_unload() {
1497 if (unload_reported()) {
1498 // During unloading we transition to unloaded and then to zombie
1499 // and the unloading is reported during the first transition.
1500 return;
1501 }
1502
1509 assert(_method != NULL && !is_unloaded(), "just checking"); 1503 assert(_method != NULL && !is_unloaded(), "just checking");
1510 DTRACE_METHOD_UNLOAD_PROBE(method()); 1504 DTRACE_METHOD_UNLOAD_PROBE(method());
1511 1505
1512 // If a JVMTI agent has enabled the CompiledMethodUnload event then 1506 // If a JVMTI agent has enabled the CompiledMethodUnload event then
1513 // post the event. Sometime later this nmethod will be made a zombie by 1507 // post the event. Sometime later this nmethod will be made a zombie by
1514 // the sweeper but the methodOop will not be valid at that point. 1508 // the sweeper but the methodOop will not be valid at that point.
1515 if (JvmtiExport::should_post_compiled_method_unload()) { 1509 if (JvmtiExport::should_post_compiled_method_unload()) {
1516 assert(!unload_reported(), "already unloaded"); 1510 assert(!unload_reported(), "already unloaded");
1517 HandleMark hm; 1511 HandleMark hm;
1518 JvmtiExport::post_compiled_method_unload_at_safepoint( 1512 JvmtiExport::post_compiled_method_unload(method()->jmethod_id(), code_begin());
1519 method()->jmethod_id(), code_begin());
1520 } 1513 }
1521 1514
1522 // The JVMTI CompiledMethodUnload event can be enabled or disabled at 1515 // The JVMTI CompiledMethodUnload event can be enabled or disabled at
1523 // any time. As the nmethod is being unloaded now we mark it has 1516 // any time. As the nmethod is being unloaded now we mark it has
1524 // having the unload event reported - this will ensure that we don't 1517 // having the unload event reported - this will ensure that we don't