879 return self->is_lock_owned((address)mark->locker()) ?
880 owner_self : owner_other;
881 }
882
883 // CASE: inflated. Mark (tagged pointer) points to an objectMonitor.
884 // The Object:ObjectMonitor relationship is stable as long as we're
885 // not at a safepoint.
886 if (mark->has_monitor()) {
887 void * owner = mark->monitor()->_owner;
888 if (owner == NULL) return owner_none;
889 return (owner == self ||
890 self->is_lock_owned((address)owner)) ? owner_self : owner_other;
891 }
892
893 // CASE: neutral
894 assert(mark->is_neutral(), "sanity check");
895 return owner_none; // it's unlocked
896 }
897
898 // FIXME: jvmti should call this
899 JavaThread* ObjectSynchronizer::get_lock_owner(Handle h_obj, bool doLock) {
900 if (UseBiasedLocking) {
901 if (SafepointSynchronize::is_at_safepoint()) {
902 BiasedLocking::revoke_at_safepoint(h_obj);
903 } else {
904 BiasedLocking::revoke_and_rebias(h_obj, false, JavaThread::current());
905 }
906 assert(!h_obj->mark()->has_bias_pattern(), "biases should be revoked by now");
907 }
908
909 oop obj = h_obj();
910 address owner = NULL;
911
912 markOop mark = ReadStableMark(obj);
913
914 // Uncontended case, header points to stack
915 if (mark->has_locker()) {
916 owner = (address) mark->locker();
917 }
918
919 // Contended case, header points to ObjectMonitor (tagged pointer)
920 if (mark->has_monitor()) {
921 ObjectMonitor* monitor = mark->monitor();
922 assert(monitor != NULL, "monitor should be non-null");
923 owner = (address) monitor->owner();
924 }
925
926 if (owner != NULL) {
927 // owning_thread_from_monitor_owner() may also return NULL here
928 return Threads::owning_thread_from_monitor_owner(owner, doLock);
929 }
930
931 // Unlocked case, header in place
932 // Cannot have assertion since this object may have been
933 // locked by another thread when reaching here.
934 // assert(mark->is_neutral(), "sanity check");
935
936 return NULL;
937 }
938
939 // Visitors ...
940
941 void ObjectSynchronizer::monitors_iterate(MonitorClosure* closure) {
942 PaddedEnd<ObjectMonitor> * block =
943 (PaddedEnd<ObjectMonitor> *)OrderAccess::load_ptr_acquire(&gBlockList);
944 while (block != NULL) {
945 assert(block->object() == CHAINMARKER, "must be a block header");
946 for (int i = _BLOCKSIZE - 1; i > 0; i--) {
947 ObjectMonitor* mid = (ObjectMonitor *)(block + i);
948 oop object = (oop)mid->object();
|
879 return self->is_lock_owned((address)mark->locker()) ?
880 owner_self : owner_other;
881 }
882
883 // CASE: inflated. Mark (tagged pointer) points to an objectMonitor.
884 // The Object:ObjectMonitor relationship is stable as long as we're
885 // not at a safepoint.
886 if (mark->has_monitor()) {
887 void * owner = mark->monitor()->_owner;
888 if (owner == NULL) return owner_none;
889 return (owner == self ||
890 self->is_lock_owned((address)owner)) ? owner_self : owner_other;
891 }
892
893 // CASE: neutral
894 assert(mark->is_neutral(), "sanity check");
895 return owner_none; // it's unlocked
896 }
897
898 // FIXME: jvmti should call this
899 JavaThread* ObjectSynchronizer::get_lock_owner(ThreadsList * t_list, Handle h_obj) {
900 if (UseBiasedLocking) {
901 if (SafepointSynchronize::is_at_safepoint()) {
902 BiasedLocking::revoke_at_safepoint(h_obj);
903 } else {
904 BiasedLocking::revoke_and_rebias(h_obj, false, JavaThread::current());
905 }
906 assert(!h_obj->mark()->has_bias_pattern(), "biases should be revoked by now");
907 }
908
909 oop obj = h_obj();
910 address owner = NULL;
911
912 markOop mark = ReadStableMark(obj);
913
914 // Uncontended case, header points to stack
915 if (mark->has_locker()) {
916 owner = (address) mark->locker();
917 }
918
919 // Contended case, header points to ObjectMonitor (tagged pointer)
920 if (mark->has_monitor()) {
921 ObjectMonitor* monitor = mark->monitor();
922 assert(monitor != NULL, "monitor should be non-null");
923 owner = (address) monitor->owner();
924 }
925
926 if (owner != NULL) {
927 // owning_thread_from_monitor_owner() may also return NULL here
928 return Threads::owning_thread_from_monitor_owner(t_list, owner);
929 }
930
931 // Unlocked case, header in place
932 // Cannot have assertion since this object may have been
933 // locked by another thread when reaching here.
934 // assert(mark->is_neutral(), "sanity check");
935
936 return NULL;
937 }
938
939 // Visitors ...
940
941 void ObjectSynchronizer::monitors_iterate(MonitorClosure* closure) {
942 PaddedEnd<ObjectMonitor> * block =
943 (PaddedEnd<ObjectMonitor> *)OrderAccess::load_ptr_acquire(&gBlockList);
944 while (block != NULL) {
945 assert(block->object() == CHAINMARKER, "must be a block header");
946 for (int i = _BLOCKSIZE - 1; i > 0; i--) {
947 ObjectMonitor* mid = (ObjectMonitor *)(block + i);
948 oop object = (oop)mid->object();
|