tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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:
Mmemory/build/Mutex.h | 24++++++++++--------------
Mmemory/build/mozjemalloc.cpp | 2+-
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.