Fix Valgrind memory leak warning by freeing alternate signal stack #15336
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.
Hello,
This is a proof-of-concept pull request.
Recently, it was reported on the forum that when running Crystal programs with Valgrind, the alternate signal stack allocated by LibC.malloc is not freed before the program ends. Instead, the operating system frees it after the program finishes.
https://forum.crystal-lang.org/t/valgrind-memory-leak-in-helloworld-app-crystal-lang/7583
To fix this, I added an at_exit signal handler that switches back to the default stack and then frees the alternate stack. This stops Valgrind from showing a "memory leak" warning.
This pull request also adds a new system-level at_exit handler in AtExitHandlers. I created this because it is not good practice to use the regular at_exit for system tasks. The new handler can be used to free memory allocated by LibC.malloc and handle other system cleanup.
Thank you for reviewing this.