Skip to content

Commit

Permalink
Merge pull request #16365 from tajila/loom2
Browse files Browse the repository at this point in the history
Add assertions to virtual thread mount and unmount
  • Loading branch information
babsingh committed Dec 1, 2022
2 parents 73cb648 + 6bbc66b commit e548ed4
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 0 deletions.
2 changes: 2 additions & 0 deletions runtime/j9vm/j9scar.tdf
Original file line number Diff line number Diff line change
Expand Up @@ -364,3 +364,5 @@ TraceEntry=Trc_SC_VirtualThreadUnmountEnd_Entry Overhead=1 Level=3 Template="thr
TraceExit=Trc_SC_VirtualThreadUnmountEnd_Exit Overhead=1 Level=3 Template="thread = 0x%p, lastUnmount = %d"

TraceEvent=Trc_SC_VirtualThread_Info Overhead=1 Level=3 Test Template="virtualThreadObj = 0x%p, virtualThreadState = 0x%p, virtualThreadInspectorCount = %lld, carrierThreadObj = 0x%p, continuationObj = 0x%p, J9VMContinuation = 0x%p"

TraceEvent=Trc_SC_VirtualThread_RootNodeSet Overhead=1 Level=1 Test Template="Virtual threadlist root node set, global ref = 0x%p"
10 changes: 10 additions & 0 deletions runtime/j9vm/javanextvmi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,8 @@ JVM_VirtualThreadMountEnd(JNIEnv *env, jobject thread, jboolean firstMount)
f_monitorEnter(vm->liveVirtualThreadListMutex);
j9object_t threadObj = J9_JNI_UNWRAP_REFERENCE(thread);

Assert_SC_true(IS_JAVA_LANG_VIRTUALTHREAD(currentThread, threadObj));

if (TrcEnabled_Trc_SC_VirtualThread_Info) {
j9object_t continuationObj = J9VMJAVALANGVIRTUALTHREAD_CONT(currentThread, threadObj);
Trc_SC_VirtualThread_Info(
Expand All @@ -333,10 +335,14 @@ JVM_VirtualThreadMountEnd(JNIEnv *env, jobject thread, jboolean firstMount)
* This prevents the root reference from becoming stale if the GC moves the object.
*/
j9object_t rootVirtualThread = mmFuncs->J9AllocateObject(currentThread, virtualThreadClass, J9_GC_ALLOCATE_OBJECT_NON_INSTRUMENTABLE);

J9VMJAVALANGVIRTUALTHREAD_SET_STATE(currentThread, rootVirtualThread, J9VM_VIRTUALTHREAD_ROOT_NODE_STATE);

if (NULL != rootVirtualThread) {
/* The global ref will be freed at vm death. */
jobject globalRef = vmFuncs->j9jni_createGlobalRef((JNIEnv *)currentThread, rootVirtualThread, JNI_FALSE);
if (NULL != globalRef) {
Trc_SC_VirtualThread_RootNodeSet(currentThread, globalRef);
vm->liveVirtualThreadList = (j9object_t *)globalRef;

/* Set linkNext/linkPrevious to itself. */
Expand Down Expand Up @@ -406,6 +412,8 @@ JVM_VirtualThreadUnmountBegin(JNIEnv *env, jobject thread, jboolean lastUnmount)
f_monitorEnter(vm->liveVirtualThreadListMutex);
j9object_t threadObj = J9_JNI_UNWRAP_REFERENCE(thread);

Assert_SC_true(IS_JAVA_LANG_VIRTUALTHREAD(currentThread, threadObj));

if (TrcEnabled_Trc_SC_VirtualThread_Info) {
j9object_t continuationObj = J9VMJAVALANGVIRTUALTHREAD_CONT(currentThread, threadObj);
Trc_SC_VirtualThread_Info(
Expand Down Expand Up @@ -479,6 +487,8 @@ JVM_VirtualThreadUnmountEnd(JNIEnv *env, jobject thread, jboolean lastUnmount)
f_monitorEnter(vm->liveVirtualThreadListMutex);
j9object_t threadObj = J9_JNI_UNWRAP_REFERENCE(thread);

Assert_SC_true(IS_JAVA_LANG_VIRTUALTHREAD(currentThread, threadObj));

if (TrcEnabled_Trc_SC_VirtualThread_Info) {
j9object_t continuationObj = J9VMJAVALANGVIRTUALTHREAD_CONT(currentThread, threadObj);
Trc_SC_VirtualThread_Info(
Expand Down
2 changes: 2 additions & 0 deletions runtime/oti/j9.h
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,8 @@ static const struct { \
#define IS_JAVA_LANG_THREAD(vmThread, object) \
isSameOrSuperClassOf(J9VMJAVALANGTHREAD_OR_NULL((vmThread)->javaVM), J9OBJECT_CLAZZ(vmThread, object))

#define J9VM_VIRTUALTHREAD_ROOT_NODE_STATE ((I_32)0xBAADF00D)

#if defined(OPENJ9_BUILD)
#define J9_SHARED_CACHE_DEFAULT_BOOT_SHARING(vm) TRUE
#else /* defined(OPENJ9_BUILD) */
Expand Down

0 comments on commit e548ed4

Please sign in to comment.