feat: add s2n_cleanup_thread and s2n_cleanup_final #4584
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.
Description of changes:
s2n_cleanup()
attempts to track the "main" thread that had calleds2n_init()
, and only perform a full cleanup of global s2n state if it is the called from the "main" thread. This may not work if the "main" thread is terminated before other threads have finished using s2n. In some cases, the other threads may be assigned the same thread ID that the "main" thread had used, resulting in premature cleanup.This change introduces
s2n_cleanup_thread()
ands2n_cleanup_final()
APIs so that customers with more advanced thread management may clean up thread-local and global state more deliberately without relying on s2n tracking the "main" thread.Call-outs
I originally had the
main_thread
ID being zeroed after the main pthread exits, so that ifs2n_cleanup()
were to be called again from a different thread that had the same ID assigned, it wouldn't attempt the global cleanup. But when a pthread terminates, it doesn't actually call the atexit registered functions:A terminated thread does allow for its ID to be reused though, so zeroing out the main thread ID in an atexit function would not be effective.
Testing:
Added unit tests
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.