commit 201ebb959d5cd846ae13dd09999220ed58d6083b
parent 08a04985b81187efeddb2f2d6717d1da9defe73b
Author: Paul Bone <paul@bone.id.au>
Date: Thu, 16 Oct 2025 22:26:49 +0000
Bug 1984011 - pt 3. Make StaticMutex's constructor constexpr r=glandium
Differential Revision: https://phabricator.services.mozilla.com/D262269
Diffstat:
2 files changed, 11 insertions(+), 15 deletions(-)
diff --git a/memory/build/Mutex.h b/memory/build/Mutex.h
@@ -44,9 +44,15 @@ struct MOZ_CAPABILITY("mutex") Mutex {
#if defined(XP_WIN)
CRITICAL_SECTION mMutex;
#elif defined(XP_DARWIN)
- os_unfair_lock mMutex;
+ os_unfair_lock mMutex = OS_UNFAIR_LOCK_INIT;
+#elif defined(XP_LINUX) && !defined(ANDROID)
+ pthread_mutex_t mMutex = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
#else
- pthread_mutex_t mMutex;
+ pthread_mutex_t mMutex = PTHREAD_MUTEX_INITIALIZER;
+#endif
+
+#ifndef XP_WIN
+ constexpr Mutex() {}
#endif
// Initializes a mutex. Returns whether initialization succeeded.
@@ -124,6 +130,8 @@ struct MOZ_CAPABILITY("mutex") Mutex {
struct MOZ_CAPABILITY("mutex") StaticMutex {
SRWLOCK mMutex;
+ constexpr StaticMutex() : mMutex(SRWLOCK_INIT) {}
+
inline void Lock() MOZ_CAPABILITY_ACQUIRE() {
AcquireSRWLockExclusive(&mMutex);
}
@@ -133,21 +141,9 @@ struct MOZ_CAPABILITY("mutex") StaticMutex {
}
};
-// Normally, we'd use a constexpr constructor, but MSVC likes to create
-// static initializers anyways.
-# define STATIC_MUTEX_INIT SRWLOCK_INIT
-
#else
typedef Mutex StaticMutex;
-# if defined(XP_DARWIN)
-# define STATIC_MUTEX_INIT OS_UNFAIR_LOCK_INIT
-# elif defined(XP_LINUX) && !defined(ANDROID)
-# define STATIC_MUTEX_INIT PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
-# else
-# define STATIC_MUTEX_INIT PTHREAD_MUTEX_INITIALIZER
-# endif
-
#endif
#ifdef XP_WIN
diff --git a/memory/build/mozjemalloc.cpp b/memory/build/mozjemalloc.cpp
@@ -216,7 +216,7 @@ static Atomic<bool, MemoryOrdering::Relaxed> malloc_initialized;
#endif
// This lock must be held while bootstrapping us.
-StaticMutex gInitLock MOZ_UNANNOTATED = {STATIC_MUTEX_INIT};
+MOZ_CONSTINIT StaticMutex gInitLock MOZ_UNANNOTATED;
// ***************************************************************************
// Statistics data structures.