Fix Mutex
destructors being incorrectly run at exit (cl/364325997)
#345
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The code base had several places where global
Mutex
objects were being allocated statically. As a result, their destructors were being run whenexit()
was called. This is a violation of the Google C++ style guide, which reads:https://google.github.io/styleguide/cppguide.html#Static_and_Global_Variables
The fix is to simply create these
Mutex
objects on the heap. By doing so, the destructors will never run.Mutex
objects are not trivially destructible and the execution of their destructors at application exit has no value. Worse, it has been observed that sometimes these destructors fail, resulting in the application failing an assertion check and needlessly crashing. Admittedly, these crashes appeared to be side effects of other use-after-free bugs; however, the crashes were a red herring and hampered investigation of the true bugs.This sort of has come up before, such as the crashes fixed by firebase/firebase-ios-sdk#6849.