RFR: 8205957: setfldw001/TestDescription.java fails with bad field value

Leonid Mesnik lmesnik at openjdk.org
Thu Aug 15 14:14:18 UTC 2024


The summary of the problem. Test is intermittently failing because can't get expected field watch event.
The test is failing to get event in the 'setfmodw001b' thread with Xcomp only.
I verified that frame with the method 'run' of setfmodw001b is compiled when line
118: setfmodw001.setWatch(4);
is executed, however the thread is in interp_only mode. The watch events are supported by interpreter only and just ignored by compiled code.

The reason of failure is race beteween setting interp_only mode in line

https://github.com/openjdk/jdk/blob/master/test/hotspot/jtreg/vmTestbase/nsk/jvmti/SetFieldModificationWatch/setfmodw001.java#L75

 and calling method call_helper while
 the method run()
https://github.com/openjdk/jdk/blob/master/test/hotspot/jtreg/vmTestbase/nsk/jvmti/SetFieldModificationWatch/setfmodw001.java#L116

 in newly created thread 'setfmodw001b' is invoked.

The javaCalls:call are used to invoke methods from hotspot, so it might be rare issues. But still, synchronization might be improved.
The
void JavaCalls::call_helper(JavaValue* result, const methodHandle& method, JavaCallArguments* args, TRAPS)

checks if interp_only mode is set and use 'Method::from_interpreted_entry()' if not. However the interp_only might be set later before compiled method is called (or enter first safe point?). This might happens in safepoint during transition via handshake.
So the running thread is in interp_only mode however the run() method is compiled and executed already and never going to be deoptimized.

The additional setWatch calls don't try to deptimize method that are already in interp_only mode.

BTW, the when JVMCI is enabled and verified adapter exists it is also will be loaded even in interp_only mode set. There is not race here, just ignoring of interp_only mode.

I run failing test with Xcomp ~1000 times and tiers1-5.

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

Commit messages:
 - fix
 - f
 - with jvmci
 - fix

Changes: https://git.openjdk.org/jdk/pull/20587/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=20587&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8205957
  Stats: 49 lines in 3 files changed: 16 ins; 22 del; 11 mod
  Patch: https://git.openjdk.org/jdk/pull/20587.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/20587/head:pull/20587

PR: https://git.openjdk.org/jdk/pull/20587


More information about the hotspot-runtime-dev mailing list