< prev index next >

src/hotspot/share/runtime/vframe.hpp

Print this page
rev 60255 : 8249192: MonitorInfo stores raw oops across safepoints
Summary: Change raw oops in MonitorInfo to Handles and update Resource/HandleMarks.
Reviewed-by: sspitsyn, dholmes, coleenp, dcubed

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.

@@ -28,10 +28,11 @@
 #include "code/debugInfo.hpp"
 #include "code/debugInfoRec.hpp"
 #include "code/location.hpp"
 #include "oops/oop.hpp"
 #include "runtime/frame.hpp"
+#include "runtime/handles.inline.hpp"
 #include "runtime/stackValue.hpp"
 #include "runtime/stackValueCollection.hpp"
 #include "utilities/growableArray.hpp"
 
 // vframes are virtual stack frames representing source level activations.

@@ -239,38 +240,26 @@
 // A MonitorInfo is a ResourceObject that describes a the pair:
 // 1) the owner of the monitor
 // 2) the monitor lock
 class MonitorInfo : public ResourceObj {
  private:
-  oop        _owner; // the object owning the monitor
+  Handle     _owner; // the object owning the monitor
   BasicLock* _lock;
-  oop        _owner_klass; // klass (mirror) if owner was scalar replaced
+  Handle     _owner_klass; // klass (mirror) if owner was scalar replaced
   bool       _eliminated;
   bool       _owner_is_scalar_replaced;
  public:
   // Constructor
-  MonitorInfo(oop owner, BasicLock* lock, bool eliminated, bool owner_is_scalar_replaced) {
-    if (!owner_is_scalar_replaced) {
-      _owner = owner;
-      _owner_klass = NULL;
-    } else {
-      assert(eliminated, "monitor should be eliminated for scalar replaced object");
-      _owner = NULL;
-      _owner_klass = owner;
-    }
-    _lock  = lock;
-    _eliminated = eliminated;
-    _owner_is_scalar_replaced = owner_is_scalar_replaced;
-  }
+  MonitorInfo(oop owner, BasicLock* lock, bool eliminated, bool owner_is_scalar_replaced);
   // Accessors
   oop        owner() const {
     assert(!_owner_is_scalar_replaced, "should not be called for scalar replaced object");
-    return _owner;
+    return _owner();
   }
   oop   owner_klass() const {
     assert(_owner_is_scalar_replaced, "should not be called for not scalar replaced object");
-    return _owner_klass;
+    return _owner_klass();
   }
   BasicLock* lock()  const { return _lock;  }
   bool eliminated()  const { return _eliminated; }
   bool owner_is_scalar_replaced()  const { return _owner_is_scalar_replaced; }
 };
< prev index next >