RFR: 8317262: LockStack::contains(oop) fails "assert(t->is_Java_thread()) failed: incorrect cast to JavaThread"

Stefan Karlsson stefank at openjdk.org
Thu Oct 5 08:44:09 UTC 2023


On Thu, 5 Oct 2023 01:47:03 GMT, David Holmes <dholmes at openjdk.org> wrote:

> Please review this simple fix to `LockStack::is_owning_thread()` that allows it to be called by a non-JavaThread. Thanks to @pchilano  for the regression test.
> 
> Testing:
> - new regression test
> - runtime/handshake/MixedHandshakeWalkStackTest.java
> - tiers 1-3 sanity
> 
> Thanks

FWIW, there's a similar static function in sychronizer.cpp:

// Can be called from non JavaThreads (e.g., VMThread) for FastHashCode
// calculations as part of JVM/TI tagging.
static bool is_lock_owned(Thread* thread, oop obj) {
  assert(LockingMode == LM_LIGHTWEIGHT, "only call this with new lightweight locking enabled");
  return thread->is_Java_thread() ? JavaThread::cast(thread)->lock_stack().contains(obj) : false;
}


There might be an opportunity to combine/reuse/deduplicate this implementation.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/16047#issuecomment-1748390072


More information about the hotspot-runtime-dev mailing list