8215355: Object monitor deadlock with no threads holding the monitor (using jemalloc 5.1)

Mon, 18 Nov 2019 23:41:06 -0500

author
dholmes
date
Mon, 18 Nov 2019 23:41:06 -0500
changeset 9903
f37c2dd33031
parent 9902
8ef5473f5ec5
child 9904
4698900b8221

8215355: Object monitor deadlock with no threads holding the monitor (using jemalloc 5.1)
Reviewed-by: rehn, stuefe, dcubed, sspitsyn

agent/src/share/classes/sun/jvm/hotspot/runtime/JavaThread.java file | annotate | diff | comparison | revisions
src/share/vm/runtime/thread.cpp file | annotate | diff | comparison | revisions
src/share/vm/runtime/thread.hpp file | annotate | diff | comparison | revisions
     1.1 --- a/agent/src/share/classes/sun/jvm/hotspot/runtime/JavaThread.java	Mon Dec 16 11:27:08 2019 -0500
     1.2 +++ b/agent/src/share/classes/sun/jvm/hotspot/runtime/JavaThread.java	Mon Nov 18 23:41:06 2019 -0500
     1.3 @@ -371,14 +371,14 @@
     1.4      Address stackBase = getStackBase();
     1.5      // Be robust
     1.6      if (sp == null) return false;
     1.7 -    return stackBase.greaterThanOrEqual(a) && sp.lessThanOrEqual(a);
     1.8 +    return stackBase.greaterThan(a) && sp.lessThanOrEqual(a);
     1.9    }
    1.10  
    1.11    public boolean isLockOwned(Address a) {
    1.12      Address stackBase = getStackBase();
    1.13      Address stackLimit = stackBase.addOffsetTo(-getStackSize());
    1.14  
    1.15 -    return stackBase.greaterThanOrEqual(a) && stackLimit.lessThanOrEqual(a);
    1.16 +    return stackBase.greaterThan(a) && stackLimit.lessThanOrEqual(a);
    1.17  
    1.18      // FIXME: should traverse MonitorArray/MonitorChunks as in VM
    1.19    }
     2.1 --- a/src/share/vm/runtime/thread.cpp	Mon Dec 16 11:27:08 2019 -0500
     2.2 +++ b/src/share/vm/runtime/thread.cpp	Mon Nov 18 23:41:06 2019 -0500
     2.3 @@ -962,7 +962,7 @@
     2.4    address end = os::current_stack_pointer();
     2.5    // Allow non Java threads to call this without stack_base
     2.6    if (_stack_base == NULL) return true;
     2.7 -  if (stack_base() >= adr && adr >= end) return true;
     2.8 +  if (stack_base() > adr && adr >= end) return true;
     2.9  
    2.10    return false;
    2.11  }
     3.1 --- a/src/share/vm/runtime/thread.hpp	Mon Dec 16 11:27:08 2019 -0500
     3.2 +++ b/src/share/vm/runtime/thread.hpp	Mon Nov 18 23:41:06 2019 -0500
     3.3 @@ -558,7 +558,7 @@
     3.4  
     3.5    bool    on_local_stack(address adr) const {
     3.6      /* QQQ this has knowledge of direction, ought to be a stack method */
     3.7 -    return (_stack_base >= adr && adr >= (_stack_base - _stack_size));
     3.8 +    return (_stack_base > adr && adr >= (_stack_base - _stack_size));
     3.9    }
    3.10  
    3.11    uintptr_t self_raw_id()                    { return _self_raw_id; }

mercurial