diff src/share/vm/runtime/vframe.cpp @ 17967:67d80ad682bf

Merge
author kevinw
date Wed, 04 Jun 2014 14:44:56 +0000
parents 4a1062dc52d1
children 52b4284cb496 c204e2044c29
line wrap: on
line diff
--- a/src/share/vm/runtime/vframe.cpp	Mon Jun 02 10:01:15 2014 +0200
+++ b/src/share/vm/runtime/vframe.cpp	Wed Jun 04 14:44:56 2014 +0000
@@ -199,6 +199,7 @@
         continue;
       }
       if (monitor->owner() != NULL) {
+        // the monitor is associated with an object, i.e., it is locked
 
         // First, assume we have the monitor locked. If we haven't found an
         // owned monitor before and this is the first frame, then we need to
@@ -209,7 +210,11 @@
         if (!found_first_monitor && frame_count == 0) {
           markOop mark = monitor->owner()->mark();
           if (mark->has_monitor() &&
-              mark->monitor() == thread()->current_pending_monitor()) {
+              ( // we have marked ourself as pending on this monitor
+                mark->monitor() == thread()->current_pending_monitor() ||
+                // we are not the owner of this monitor
+                !mark->monitor()->is_entered(thread())
+              )) {
             lock_state = "waiting to lock";
           }
         }