Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add s2n_cleanup_thread and s2n_cleanup_final #4584

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

WesleyRosenblum
Copy link
Contributor

@WesleyRosenblum WesleyRosenblum commented Jun 5, 2024

Description of changes:

s2n_cleanup() attempts to track the "main" thread that had called s2n_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() and s2n_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 if s2n_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:

When a thread terminates, process-shared resources (e.g.,
mutexes, condition variables, semaphores, and file descriptors)
are not released, and functions registered using atexit(3) are
not called.

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.

@github-actions github-actions bot added the s2n-core team label Jun 5, 2024
@WesleyRosenblum WesleyRosenblum marked this pull request as ready for review June 5, 2024 17:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant