796 }
797
798 oop obj = h_obj();
799 address owner = NULL;
800
801 markOop mark = ReadStableMark (obj) ;
802
803 // Uncontended case, header points to stack
804 if (mark->has_locker()) {
805 owner = (address) mark->locker();
806 }
807
808 // Contended case, header points to ObjectMonitor (tagged pointer)
809 if (mark->has_monitor()) {
810 ObjectMonitor* monitor = mark->monitor();
811 assert(monitor != NULL, "monitor should be non-null");
812 owner = (address) monitor->owner();
813 }
814
815 if (owner != NULL) {
816 return Threads::owning_thread_from_monitor_owner(owner, doLock);
817 }
818
819 // Unlocked case, header in place
820 // Cannot have assertion since this object may have been
821 // locked by another thread when reaching here.
822 // assert(mark->is_neutral(), "sanity check");
823
824 return NULL;
825 }
826 // Visitors ...
827
828 void ObjectSynchronizer::monitors_iterate(MonitorClosure* closure) {
829 ObjectMonitor* block = gBlockList;
830 ObjectMonitor* mid;
831 while (block) {
832 assert(block->object() == CHAINMARKER, "must be a block header");
833 for (int i = _BLOCKSIZE - 1; i > 0; i--) {
834 mid = block + i;
835 oop object = (oop) mid->object();
|
796 }
797
798 oop obj = h_obj();
799 address owner = NULL;
800
801 markOop mark = ReadStableMark (obj) ;
802
803 // Uncontended case, header points to stack
804 if (mark->has_locker()) {
805 owner = (address) mark->locker();
806 }
807
808 // Contended case, header points to ObjectMonitor (tagged pointer)
809 if (mark->has_monitor()) {
810 ObjectMonitor* monitor = mark->monitor();
811 assert(monitor != NULL, "monitor should be non-null");
812 owner = (address) monitor->owner();
813 }
814
815 if (owner != NULL) {
816 // owning_thread_from_monitor_owner() may also return NULL here
817 return Threads::owning_thread_from_monitor_owner(owner, doLock);
818 }
819
820 // Unlocked case, header in place
821 // Cannot have assertion since this object may have been
822 // locked by another thread when reaching here.
823 // assert(mark->is_neutral(), "sanity check");
824
825 return NULL;
826 }
827 // Visitors ...
828
829 void ObjectSynchronizer::monitors_iterate(MonitorClosure* closure) {
830 ObjectMonitor* block = gBlockList;
831 ObjectMonitor* mid;
832 while (block) {
833 assert(block->object() == CHAINMARKER, "must be a block header");
834 for (int i = _BLOCKSIZE - 1; i > 0; i--) {
835 mid = block + i;
836 oop object = (oop) mid->object();
|