--- a/hotspot/src/share/vm/runtime/vframe.hpp Fri Jun 05 10:25:39 2009 -0700
+++ b/hotspot/src/share/vm/runtime/vframe.hpp Tue Jun 09 16:19:10 2009 -0700
@@ -230,18 +230,36 @@
private:
oop _owner; // the object owning the monitor
BasicLock* _lock;
+ oop _owner_klass; // klass if owner was scalar replaced
bool _eliminated;
+ bool _owner_is_scalar_replaced;
public:
// Constructor
- MonitorInfo(oop owner, BasicLock* lock, bool eliminated) {
- _owner = owner;
+ 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;
}
// Accessors
- oop owner() const { return _owner; }
+ oop owner() const {
+ assert(!_owner_is_scalar_replaced, "should not be called for scalar replaced object");
+ return _owner;
+ }
+ klassOop owner_klass() const {
+ assert(_owner_is_scalar_replaced, "should not be called for not scalar replaced object");
+ return (klassOop)_owner_klass;
+ }
BasicLock* lock() const { return _lock; }
bool eliminated() const { return _eliminated; }
+ bool owner_is_scalar_replaced() const { return _owner_is_scalar_replaced; }
};
class vframeStreamCommon : StackObj {