Skip to content

Commit 1af39f5

Browse files
authored
Merge pull request #19874 from thallium/v0.47.0-release
(0.47) Destroy virtual thread data after VirtualThreadEnd callback
2 parents ddb1ba5 + 398127e commit 1af39f5

File tree

9 files changed

+36
-3
lines changed

9 files changed

+36
-3
lines changed

runtime/include/ibmjvmti.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@
105105

106106
#define COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_MOUNT "com.sun.hotspot.events.VirtualThreadMount"
107107
#define COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_UNMOUNT "com.sun.hotspot.events.VirtualThreadUnmount"
108+
#define COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_DESTROY "com.sun.hotspot.events.VirtualThreadDestroy"
108109

109110
#define OPENJ9_EVENT_VM_CHECKPOINT "openj9.event.VMCheckpoint"
110111
#define OPENJ9_EVENT_VM_RESTORE "openj9.event.VMRestore"

runtime/j9vm/javanextvmi.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,7 @@ JVM_VirtualThreadEnd(JNIEnv *env, jobject vthread)
724724
TRIGGER_J9HOOK_VM_VIRTUAL_THREAD_END(vm->hookInterface, currentThread);
725725
setContinuationStateToLastUnmount((J9VMThread *)env, vthread);
726726
virtualThreadUnmountBegin(env, vthread);
727+
TRIGGER_J9HOOK_VM_VIRTUAL_THREAD_DESTROY(vm->hookInterface, currentThread);
727728

728729
vmFuncs->internalExitVMToJNI(currentThread);
729730

runtime/jvmti/jvmtiExtensionMechanism.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,12 @@ static const jvmtiParamInfo jvmtiVirtualThreadUnmount_params[] = {
366366
{ "jni_env", JVMTI_KIND_IN_PTR, JVMTI_TYPE_JNIENV, JNI_FALSE },
367367
{ "thread", JVMTI_KIND_IN, JVMTI_TYPE_JTHREAD, JNI_FALSE }
368368
};
369+
370+
/* (jvmtiEnv *jvmti_env, jthread thread) */
371+
static const jvmtiParamInfo jvmtiVirtualThreadDestroy_params[] = {
372+
{ "jni_env", JVMTI_KIND_IN_PTR, JVMTI_TYPE_JNIENV, JNI_FALSE },
373+
{ "thread", JVMTI_KIND_IN, JVMTI_TYPE_JTHREAD, JNI_FALSE }
374+
};
369375
#endif /* JAVA_SPEC_VERSION >= 19 */
370376

371377
#if JAVA_SPEC_VERSION >= 19
@@ -906,6 +912,12 @@ static const J9JVMTIExtensionEventInfo J9JVMTIExtensionEventInfoTable[] = {
906912
J9NLS_JVMTI_COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_UNMOUNT,
907913
SIZE_AND_TABLE(jvmtiVirtualThreadUnmount_params),
908914
},
915+
{
916+
J9JVMTI_EVENT_COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_DESTROY,
917+
COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_DESTROY,
918+
J9NLS_JVMTI_COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_DESTROY,
919+
SIZE_AND_TABLE(jvmtiVirtualThreadDestroy_params),
920+
},
909921
#endif /* JAVA_SPEC_VERSION >= 19 */
910922
#if defined(J9VM_OPT_CRIU_SUPPORT)
911923
{

runtime/jvmti/jvmtiHelpers.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ static const UDATA reasonCodeFromJVMTIEvent[] = {
8585
J9_JNI_OFFLOAD_SWITCH_J9JVMTI_GC_CYCLE_FINISH, /* J9JVMTI_EVENT_COM_IBM_GARBAGE_COLLECTION_CYCLE_FINISH */
8686
J9_JNI_OFFLOAD_SWITCH_J9JVMTI_VIRTUAL_THREAD_MOUNT, /* J9JVMTI_EVENT_COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_MOUNT */
8787
J9_JNI_OFFLOAD_SWITCH_J9JVMTI_VIRTUAL_THREAD_UNMOUNT, /* J9JVMTI_EVENT_COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_UNMOUNT */
88+
J9_JNI_OFFLOAD_SWITCH_J9JVMTI_VIRTUAL_THREAD_DESTROY, /* J9JVMTI_EVENT_COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_DESTROY */
8889
J9_JNI_OFFLOAD_SWITCH_J9JVMTI_EVENT_OPENJ9_VM_CHECKPOINT, /* J9JVMTI_EVENT_OPENJ9_VM_CHECKPOINT */
8990
J9_JNI_OFFLOAD_SWITCH_J9JVMTI_EVENT_OPENJ9_VM_RESTORE, /* J9JVMTI_EVENT_OPENJ9_VM_RESTORE */
9091
};

runtime/jvmti/jvmtiHook.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -968,7 +968,7 @@ unhookAllEvents(J9JVMTIEnv * j9env)
968968

969969
hookUnregister(vmHook, J9HOOK_VM_THREAD_DESTROY, jvmtiHookThreadDestroy, NULL, j9env);
970970
#if JAVA_SPEC_VERSION >= 19
971-
hookUnregister(vmHook, J9HOOK_VM_VIRTUAL_THREAD_END, jvmtiHookVirtualThreadDestroy, NULL, j9env);
971+
hookUnregister(vmHook, J9HOOK_VM_VIRTUAL_THREAD_DESTROY, jvmtiHookVirtualThreadDestroy, NULL, j9env);
972972
#endif /* JAVA_SPEC_VERSION >= 19 */
973973
hookUnregister(vmHook, J9HOOK_VM_POP_FRAMES_INTERRUPT, jvmtiHookPopFramesInterrupt, NULL, j9env);
974974

@@ -987,7 +987,7 @@ hookRequiredEvents(J9JVMTIEnv * j9env)
987987
}
988988

989989
#if JAVA_SPEC_VERSION >= 19
990-
if (hookRegister(vmHook, J9HOOK_VM_VIRTUAL_THREAD_END, jvmtiHookVirtualThreadDestroy, OMR_GET_CALLSITE(), j9env)) {
990+
if (hookRegister(vmHook, J9HOOK_VM_VIRTUAL_THREAD_DESTROY, jvmtiHookVirtualThreadDestroy, OMR_GET_CALLSITE(), j9env)) {
991991
return 1;
992992
}
993993
#endif /* JAVA_SPEC_VERSION >= 19 */

runtime/nls/j9ti/jvmti.nls

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,3 +666,10 @@ J9NLS_J9JVMTI_OPENJ9_FUNCTION_REMOVE_DEBUG_THREAD.explanation=Remove a JDWP thre
666666
J9NLS_J9JVMTI_OPENJ9_FUNCTION_REMOVE_DEBUG_THREAD.system_action=None
667667
J9NLS_J9JVMTI_OPENJ9_FUNCTION_REMOVE_DEBUG_THREAD.user_response=None
668668
# END NON-TRANSLATABLE
669+
670+
J9NLS_JVMTI_COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_DESTROY=Free native resources after a virtual thread ends.
671+
# START NON-TRANSLATABLE
672+
J9NLS_JVMTI_COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_DESTROY.explanation=Internationalized description of a JVMTI extension
673+
J9NLS_JVMTI_COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_DESTROY.system_action=None
674+
J9NLS_JVMTI_COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_DESTROY.user_response=None
675+
# END NON-TRANSLATABLE

runtime/oti/j9consts.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -795,7 +795,7 @@ extern "C" {
795795
#define J9_JNI_OFFLOAD_SWITCH_JVMTI_MONITOR_CONTENDED_ENTERED 0x30
796796
#define J9_JNI_OFFLOAD_SWITCH_J9JVMTI_VIRTUAL_THREAD_MOUNT 0x31
797797
#define J9_JNI_OFFLOAD_SWITCH_J9JVMTI_VIRTUAL_THREAD_UNMOUNT 0x32
798-
/* 0x33 Reserved for JVMTI event */
798+
#define J9_JNI_OFFLOAD_SWITCH_J9JVMTI_VIRTUAL_THREAD_DESTROY 0x33
799799
#define J9_JNI_OFFLOAD_SWITCH_JVMTI_RESOURCE_EXHAUSTED 0x34
800800
#define J9_JNI_OFFLOAD_SWITCH_JVMTI_GC_START 0x35
801801
#define J9_JNI_OFFLOAD_SWITCH_JVMTI_GC_FINISH 0x36

runtime/oti/j9vm.hdf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1383,6 +1383,16 @@ typedef UDATA (* lookupNativeAddressCallback)(struct J9VMThread *currentThread,
13831383
<data type="struct J9VMThread*" name="currentThread" description="current thread" />
13841384
</event>
13851385

1386+
<event>
1387+
<name>J9HOOK_VM_VIRTUAL_THREAD_DESTROY</name>
1388+
<description>
1389+
Triggered after J9HOOK_VM_VIRTUAL_THREAD_END to free native resources.
1390+
currentThread->threadObject is the virtual thread at the point of trigger.
1391+
</description>
1392+
<struct>J9VMVirtualThreadDestroyEvent</struct>
1393+
<data type="struct J9VMThread*" name="currentThread" description="current thread" />
1394+
</event>
1395+
13861396
<event>
13871397
<name>J9HOOK_VM_CRIU_CHECKPOINT</name>
13881398
<description>Triggered at the end of CRIU checkpoint, just before CRIU dump</description>

runtime/oti/jvmtiInternal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ typedef enum {
4343
J9JVMTI_EVENT_COM_IBM_GARBAGE_COLLECTION_CYCLE_FINISH,
4444
J9JVMTI_EVENT_COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_MOUNT,
4545
J9JVMTI_EVENT_COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_UNMOUNT,
46+
J9JVMTI_EVENT_COM_SUN_HOTSPOT_EVENTS_VIRTUAL_THREAD_DESTROY,
4647
J9JVMTI_EVENT_OPENJ9_VM_CHECKPOINT,
4748
J9JVMTI_EVENT_OPENJ9_VM_RESTORE,
4849
J9JVMTI_AFTER_LAST_EXTENSION_EVENT

0 commit comments

Comments
 (0)