On Fri, 12 May 2023 02:14:00 GMT, Patricio Chilano Mateo <pchilanom...@openjdk.org> wrote:
> The following patch fixes a bug introduced while refactoring the > VirtualThreadStart/End events. Specifically, the code to delete the > JvmtiThreadState of a terminating vthread was moved before we start the VTMS > transition. That allowed said code to run concurrently with > recompute_enabled() leading to different crashing modes. I wrote the detailed > sequence of events leading to the crash in the bug comments. > > To fix it I moved the cleanup code back after the call to > VTMS_unmount_begin(). Now, since the rebinding of the JvmtiThreadState to > that of the carrier has to be done after this cleanup code is executed, > otherwise we would delete the wrong JvmtiThreadState state, I had to add a > boolean argument to VTMS_unmount_begin() to differentiate the last unmount > call from the other ones. This is unfortunate since ideally > VTMS_unmount_begin() would be oblivious to these two cases as with > VTMS_mount_end() where we don't need to check if this is the first mount. > I looked for other ways to solve it instead of the extra boolean argument but > wasn't convinced. One way would be to have another > JvmtiExport::cleanup_thread() that would handle this case. Another way which > is very simple is to move the rebind_to_jvmti_thread_state_of() call to > VTMS_unmount_end() instead. But that means during the transition the > _jvmti_thread_state field of the carrier would be either null or that of the > vthread, unlike today which is always that of the carrier during the > transitions. I didn't want to change that behavior in this fix but I can also > explore that route. > > I tested the patch with the reproducer I attached to the bug, plus I also run > tiers1-3 in mach5. > > Thanks, > Patricio This pull request has now been integrated. Changeset: 24094482 Author: Patricio Chilano Mateo <pchilanom...@openjdk.org> URL: https://git.openjdk.org/jdk/commit/24094482f00b6ac412bfad770051775f2ab5cf73 Stats: 213 lines in 4 files changed: 205 ins; 1 del; 7 mod 8307365: JvmtiStressModule hit SIGSEGV in JvmtiEventControllerPrivate::recompute_thread_enabled Reviewed-by: sspitsyn, dcubed, lmesnik ------------- PR: https://git.openjdk.org/jdk/pull/13949