Control exit-time destructors with new static variable macro #2105
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.
Introduce the
CPPHTTPLIB_DEFINE_STATIC
macro to define static variables with optional dynamic allocation, enabled by definingCPPHTTPLIB_NO_EXIT_TIME_DESTRUCTORS
. Dynamic allocation prevents running their destructors, which avoids race conditions with atexit handlers that may depend on them. Also includes a test to verify this functionality and updates the documentation to explain the usage and rationale for disabling exit-time destructors.Note: gtest v1.12.1 does not include the fix for exit-time destructors (after finding the last C++11 version, I forgot to re-check that it includes the relevant commit), necessitating compiling gtest separately and without
-Wexit-time-destructors
.Resolves #2097.
To do:
std::exit
while server running or client requests in flight #2097.-Wexit-time-destructors
. (Requries: Avoid static std::string #2103 Update vendored gtest to 1.12.1 #2100)