Skip to content
Snippets Groups Projects
Commit ba8fe9b4 authored by Nat Goodspeed's avatar Nat Goodspeed
Browse files

DRTVWR-494: Move explanatory comments from LLSingleton to LockStatic.

parent 2dfaba6e
No related branches found
No related tags found
No related merge requests found
...@@ -46,6 +46,23 @@ class LockStatic ...@@ -46,6 +46,23 @@ class LockStatic
private: private:
Static* getStatic() Static* getStatic()
{ {
// Static::mMutex must be function-local static rather than class-
// static. Some of our consumers must function properly (therefore
// lock properly) even when the containing module's static variables
// have not yet been runtime-initialized. A mutex requires
// construction. A static class member might not yet have been
// constructed.
//
// We could store a dumb mutex_t*, notice when it's NULL and allocate a
// heap mutex -- but that's vulnerable to race conditions. And we can't
// defend the dumb pointer with another mutex.
//
// We could store a std::atomic<mutex_t*> -- but a default-constructed
// std::atomic<T> does not contain a valid T, even a default-constructed
// T! Which means std::atomic, too, requires runtime initialization.
//
// But a function-local static is guaranteed to be initialized exactly
// once: the first time control reaches that declaration.
static Static sData; static Static sData;
return &sData; return &sData;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment