in src/main/java/com/jetbrains/jdi/ThreadReferenceImpl.java [688:714]
public ObjectReference currentContendedMonitor()
throws IncompatibleThreadStateException {
LocalCache snapshot = localCache;
try {
if (snapshot.contendedMonitor == null &&
!snapshot.triedCurrentContended) {
snapshot.contendedMonitor = JDWP.ThreadReference.CurrentContendedMonitor.
process(vm, this).monitor;
snapshot.triedCurrentContended = true;
if ((snapshot.contendedMonitor != null) &&
((vm.traceFlags & VirtualMachine.TRACE_OBJREFS) != 0)) {
vm.printTrace(description() +
" temporarily caching contended monitor"+
" (id = " + snapshot.contendedMonitor.uniqueID() + ")");
}
}
} catch (JDWPException exc) {
switch (exc.errorCode()) {
case JDWP.Error.THREAD_NOT_SUSPENDED:
case JDWP.Error.INVALID_THREAD: /* zombie */
throw new IncompatibleThreadStateException();
default:
throw exc.toJDIException();
}
}
return snapshot.contendedMonitor;
}