tor-browser

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

commit 6f863d55e907da4b6c612941a8939dad9f9840e0
parent 649b1ba949341625ce7d2faf57c032d89356f377
Author: Paul Bone <paul@bone.id.au>
Date:   Thu, 16 Oct 2025 22:26:50 +0000

Bug 1984011 - pt 7. Add assertions to Mutex's initialisation r=glandium

Differential Revision: https://phabricator.services.mozilla.com/D262273

Diffstat:
Mmemory/build/Mutex.cpp | 2++
Mmemory/build/Mutex.h | 21+++++++++++++++++++--
2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/memory/build/Mutex.cpp b/memory/build/Mutex.cpp @@ -9,6 +9,8 @@ #include "mozilla/Assertions.h" bool Mutex::TryLock() { + MOZ_ASSERT(mInitialised); + #if defined(XP_WIN) return !!TryEnterCriticalSection(mMutex.addr()); #elif defined(XP_DARWIN) diff --git a/memory/build/Mutex.h b/memory/build/Mutex.h @@ -58,12 +58,24 @@ struct MOZ_CAPABILITY("mutex") Mutex { pthread_mutex_t mMutex = PTHREAD_MUTEX_INITIALIZER; #endif +#ifdef MOZ_DEBUG + bool mInitialised = false; + + // Called by StaticMutex + explicit constexpr Mutex(bool aInitialised) : mInitialised(aInitialised) {} +#else + explicit constexpr Mutex(bool aIgnored) {} +#endif + // Although a constexpr constructor is provided, it will not initialise the // mutex and calling Init() is required. constexpr Mutex() {} // (Re-)initializes a mutex. Returns whether initialization succeeded. inline bool Init() { +#ifdef MOZ_DEBUG + mInitialised = true; +#endif #if defined(XP_WIN) if (!InitializeCriticalSectionAndSpinCount(mMutex.addr(), 5000)) { return false; @@ -90,6 +102,8 @@ struct MOZ_CAPABILITY("mutex") Mutex { } inline void Lock() MOZ_CAPABILITY_ACQUIRE() { + MOZ_ASSERT(mInitialised); + #if defined(XP_WIN) EnterCriticalSection(mMutex.addr()); #elif defined(XP_DARWIN) @@ -111,6 +125,8 @@ struct MOZ_CAPABILITY("mutex") Mutex { [[nodiscard]] bool TryLock() MOZ_TRY_ACQUIRE(true); inline void Unlock() MOZ_CAPABILITY_RELEASE() { + MOZ_ASSERT(mInitialised); + #if defined(XP_WIN) LeaveCriticalSection(mMutex.addr()); #elif defined(XP_DARWIN) @@ -149,8 +165,9 @@ struct MOZ_CAPABILITY("mutex") StaticMutex { }; #else -typedef Mutex StaticMutex; - +struct MOZ_CAPABILITY("mutex") StaticMutex : public Mutex { + constexpr StaticMutex() : Mutex(true) {} +}; #endif #ifdef XP_WIN