Skip to content

Commit a8f2f91

Browse files
authored
Merge pull request #20792 from tajila/jfrbackport
(0.49) Release VMAccess before performing JFR teardown
2 parents 9659c4b + 50c8643 commit a8f2f91

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

runtime/vm/jfr.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -440,15 +440,19 @@ jfrVMShutdown(J9HookInterface **hook, UDATA eventNum, void *eventData, void *use
440440
{
441441
J9VMShutdownEvent *event = (J9VMShutdownEvent *)eventData;
442442
J9VMThread *currentThread = event->vmThread;
443+
bool needsVMAccess = J9_ARE_NO_BITS_SET(currentThread->publicFlags, J9_PUBLIC_FLAGS_VM_ACCESS);
443444
bool acquiredExclusive = false;
444445

445446
#if defined(DEBUG)
446447
PORT_ACCESS_FROM_VMC(currentThread);
447448
j9tty_printf(PORTLIB, "\n!!! shutdown %p\n", currentThread);
448449
#endif /* defined(DEBUG) */
449450

450-
if (J9_XACCESS_NONE == currentThread->javaVM->exclusiveAccessState) {
451+
if (needsVMAccess) {
451452
internalAcquireVMAccess(currentThread);
453+
}
454+
455+
if (J9_XACCESS_NONE == currentThread->javaVM->exclusiveAccessState) {
452456
acquireExclusiveVMAccess(currentThread);
453457
acquiredExclusive = true;
454458
}
@@ -459,10 +463,13 @@ jfrVMShutdown(J9HookInterface **hook, UDATA eventNum, void *eventData, void *use
459463

460464
if (acquiredExclusive) {
461465
releaseExclusiveVMAccess(currentThread);
462-
internalReleaseVMAccess(currentThread);
463466
}
464467

465468
tearDownJFR(currentThread->javaVM);
469+
470+
if (needsVMAccess) {
471+
internalReleaseVMAccess(currentThread);
472+
}
466473
}
467474

468475
/**
@@ -762,8 +769,13 @@ void
762769
tearDownJFR(J9JavaVM *vm)
763770
{
764771
PORT_ACCESS_FROM_JAVAVM(vm);
772+
J9VMThread *currentThread = currentVMThread(vm);
765773
J9HookInterface **vmHooks = getVMHookInterface(vm);
766774

775+
Assert_VM_mustHaveVMAccess(currentThread);
776+
777+
internalReleaseVMAccess(currentThread);
778+
767779
/* Stop the sampler thread */
768780
if (NULL != vm->jfrSamplerMutex) {
769781
omrthread_monitor_enter(vm->jfrSamplerMutex);
@@ -778,6 +790,9 @@ tearDownJFR(J9JavaVM *vm)
778790
omrthread_monitor_destroy(vm->jfrSamplerMutex);
779791
vm->jfrSamplerMutex = NULL;
780792
}
793+
794+
internalAcquireVMAccess(currentThread);
795+
781796
vm->jfrState.isStarted = FALSE;
782797
vm->jfrSamplerState = J9JFR_SAMPLER_STATE_UNINITIALIZED;
783798

0 commit comments

Comments
 (0)