11/*
2- * Copyright (c) 1997, 2023 , Oracle and/or its affiliates. All rights reserved.
2+ * Copyright (c) 1997, 2024 , Oracle and/or its affiliates. All rights reserved.
33 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44 *
55 * This code is free software; you can redistribute it and/or modify it
@@ -86,7 +86,6 @@ Monitor* Compilation_lock = nullptr;
8686Mutex* CompileTaskAlloc_lock = nullptr ;
8787Mutex* CompileStatistics_lock = nullptr ;
8888Mutex* DirectivesStack_lock = nullptr ;
89- Mutex* MultiArray_lock = nullptr ;
9089Monitor* Terminator_lock = nullptr ;
9190Monitor* InitCompleted_lock = nullptr ;
9291Monitor* BeforeExit_lock = nullptr ;
@@ -156,6 +155,8 @@ Monitor* JVMCI_lock = nullptr;
156155Monitor* JVMCIRuntime_lock = nullptr ;
157156#endif
158157
158+ // Only one RecursiveMutex
159+ RecursiveMutex* MultiArray_lock = nullptr ;
159160
160161#define MAX_NUM_MUTEX 128
161162static Mutex* _mutex_array[MAX_NUM_MUTEX];
@@ -269,7 +270,6 @@ void mutex_init() {
269270 MUTEX_DEFN (MethodCompileQueue_lock , PaddedMonitor, safepoint);
270271 MUTEX_DEFN (CompileStatistics_lock , PaddedMutex , safepoint);
271272 MUTEX_DEFN (DirectivesStack_lock , PaddedMutex , nosafepoint);
272- MUTEX_DEFN (MultiArray_lock , PaddedMutex , safepoint);
273273
274274 MUTEX_DEFN (JvmtiThreadState_lock , PaddedMutex , safepoint); // Used by JvmtiThreadState/JvmtiEventController
275275 MUTEX_DEFN (EscapeBarrier_lock , PaddedMonitor, nosafepoint); // Used to synchronize object reallocation/relocking triggered by JVMTI
@@ -283,6 +283,7 @@ void mutex_init() {
283283 MUTEX_DEFN (PeriodicTask_lock , PaddedMonitor, safepoint, true );
284284 MUTEX_DEFN (RedefineClasses_lock , PaddedMonitor, safepoint);
285285 MUTEX_DEFN (Verify_lock , PaddedMutex , safepoint);
286+ MUTEX_DEFN (ClassLoaderDataGraph_lock , PaddedMutex , safepoint);
286287
287288 if (WhiteBoxAPI) {
288289 MUTEX_DEFN (Compilation_lock , PaddedMonitor, nosafepoint);
@@ -334,7 +335,6 @@ void mutex_init() {
334335
335336 MUTEX_DEFL (PerfDataMemAlloc_lock , PaddedMutex , Heap_lock);
336337 MUTEX_DEFL (PerfDataManager_lock , PaddedMutex , Heap_lock);
337- MUTEX_DEFL (ClassLoaderDataGraph_lock , PaddedMutex , MultiArray_lock);
338338 MUTEX_DEFL (VMOperation_lock , PaddedMonitor, Heap_lock, true );
339339 MUTEX_DEFL (ClassInitError_lock , PaddedMonitor, Threads_lock);
340340
@@ -357,6 +357,9 @@ void mutex_init() {
357357 // JVMCIRuntime_lock must be acquired before JVMCI_lock to avoid deadlock
358358 MUTEX_DEFL (JVMCI_lock , PaddedMonitor, JVMCIRuntime_lock);
359359#endif
360+
361+ // Allocate RecursiveMutex
362+ MultiArray_lock = new RecursiveMutex ();
360363}
361364
362365#undef MUTEX_DEFL
0 commit comments