src/share/vm/runtime/synchronizer.cpp

changeset 9858
b985cbb00e68
parent 8729
402618d5afc9
child 9892
9a4141de094d
equal deleted inserted replaced
9727:c7a3e57fdf4a 9858:b985cbb00e68
22 * 22 *
23 */ 23 */
24 24
25 #include "precompiled.hpp" 25 #include "precompiled.hpp"
26 #include "classfile/vmSymbols.hpp" 26 #include "classfile/vmSymbols.hpp"
27 #include "jfr/jfrEvents.hpp"
27 #include "memory/resourceArea.hpp" 28 #include "memory/resourceArea.hpp"
28 #include "oops/markOop.hpp" 29 #include "oops/markOop.hpp"
29 #include "oops/oop.inline.hpp" 30 #include "oops/oop.inline.hpp"
30 #include "runtime/biasedLocking.hpp" 31 #include "runtime/biasedLocking.hpp"
31 #include "runtime/handles.inline.hpp" 32 #include "runtime/handles.inline.hpp"
1176 1177
1177 Thread::muxRelease (&ListLock) ; 1178 Thread::muxRelease (&ListLock) ;
1178 TEVENT (omFlush) ; 1179 TEVENT (omFlush) ;
1179 } 1180 }
1180 1181
1182 static void post_monitor_inflate_event(EventJavaMonitorInflate* event,
1183 const oop obj) {
1184 assert(event != NULL, "invariant");
1185 assert(event->should_commit(), "invariant");
1186 event->set_monitorClass(obj->klass());
1187 event->set_address((uintptr_t)(void*)obj);
1188 // XXX no such counters. implement?
1189 // event->set_cause((u1)cause);
1190 event->commit();
1191 }
1192
1181 // Fast path code shared by multiple functions 1193 // Fast path code shared by multiple functions
1182 ObjectMonitor* ObjectSynchronizer::inflate_helper(oop obj) { 1194 ObjectMonitor* ObjectSynchronizer::inflate_helper(oop obj) {
1183 markOop mark = obj->mark(); 1195 markOop mark = obj->mark();
1184 if (mark->has_monitor()) { 1196 if (mark->has_monitor()) {
1185 assert(ObjectSynchronizer::verify_objmon_isinpool(mark->monitor()), "monitor is invalid"); 1197 assert(ObjectSynchronizer::verify_objmon_isinpool(mark->monitor()), "monitor is invalid");
1197 ObjectMonitor * ATTR ObjectSynchronizer::inflate (Thread * Self, oop object) { 1209 ObjectMonitor * ATTR ObjectSynchronizer::inflate (Thread * Self, oop object) {
1198 // Inflate mutates the heap ... 1210 // Inflate mutates the heap ...
1199 // Relaxing assertion for bug 6320749. 1211 // Relaxing assertion for bug 6320749.
1200 assert (Universe::verify_in_progress() || 1212 assert (Universe::verify_in_progress() ||
1201 !SafepointSynchronize::is_at_safepoint(), "invariant") ; 1213 !SafepointSynchronize::is_at_safepoint(), "invariant") ;
1214
1215 EventJavaMonitorInflate event;
1202 1216
1203 for (;;) { 1217 for (;;) {
1204 const markOop mark = object->mark() ; 1218 const markOop mark = object->mark() ;
1205 assert (!mark->has_bias_pattern(), "invariant") ; 1219 assert (!mark->has_bias_pattern(), "invariant") ;
1206 1220
1328 tty->print_cr("Inflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s", 1342 tty->print_cr("Inflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
1329 (void *) object, (intptr_t) object->mark(), 1343 (void *) object, (intptr_t) object->mark(),
1330 object->klass()->external_name()); 1344 object->klass()->external_name());
1331 } 1345 }
1332 } 1346 }
1347 if (event.should_commit()) {
1348 post_monitor_inflate_event(&event, object);
1349 }
1333 return m ; 1350 return m ;
1334 } 1351 }
1335 1352
1336 // CASE: neutral 1353 // CASE: neutral
1337 // TODO-FIXME: for entry we currently inflate and then try to CAS _owner. 1354 // TODO-FIXME: for entry we currently inflate and then try to CAS _owner.
1377 ResourceMark rm; 1394 ResourceMark rm;
1378 tty->print_cr("Inflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s", 1395 tty->print_cr("Inflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
1379 (void *) object, (intptr_t) object->mark(), 1396 (void *) object, (intptr_t) object->mark(),
1380 object->klass()->external_name()); 1397 object->klass()->external_name());
1381 } 1398 }
1399 }
1400 if (event.should_commit()) {
1401 post_monitor_inflate_event(&event, object);
1382 } 1402 }
1383 return m ; 1403 return m ;
1384 } 1404 }
1385 } 1405 }
1386 1406

mercurial