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

Reviewed-by: rehn, stuefe, dcubed, sspitsyn
This commit is contained in:
David Holmes 2019-11-18 23:41:06 -05:00
parent 776522a355
commit ec51784c0d
3 changed files with 4 additions and 4 deletions

View file

@ -1007,7 +1007,7 @@ bool Thread::is_in_stack(address adr) const {
address end = os::current_stack_pointer(); address end = os::current_stack_pointer();
// Allow non Java threads to call this without stack_base // Allow non Java threads to call this without stack_base
if (_stack_base == NULL) return true; if (_stack_base == NULL) return true;
if (stack_base() >= adr && adr >= end) return true; if (stack_base() > adr && adr >= end) return true;
return false; return false;
} }

View file

@ -729,7 +729,7 @@ protected:
bool on_local_stack(address adr) const { bool on_local_stack(address adr) const {
// QQQ this has knowledge of direction, ought to be a stack method // QQQ this has knowledge of direction, ought to be a stack method
return (_stack_base >= adr && adr >= stack_end()); return (_stack_base > adr && adr >= stack_end());
} }
int lgrp_id() const { return _lgrp_id; } int lgrp_id() const { return _lgrp_id; }

View file

@ -384,14 +384,14 @@ public class JavaThread extends Thread {
Address stackBase = getStackBase(); Address stackBase = getStackBase();
// Be robust // Be robust
if (sp == null) return false; if (sp == null) return false;
return stackBase.greaterThanOrEqual(a) && sp.lessThanOrEqual(a); return stackBase.greaterThan(a) && sp.lessThanOrEqual(a);
} }
public boolean isLockOwned(Address a) { public boolean isLockOwned(Address a) {
Address stackBase = getStackBase(); Address stackBase = getStackBase();
Address stackLimit = stackBase.addOffsetTo(-getStackSize()); Address stackLimit = stackBase.addOffsetTo(-getStackSize());
return stackBase.greaterThanOrEqual(a) && stackLimit.lessThanOrEqual(a); return stackBase.greaterThan(a) && stackLimit.lessThanOrEqual(a);
// FIXME: should traverse MonitorArray/MonitorChunks as in VM // FIXME: should traverse MonitorArray/MonitorChunks as in VM
} }