Fix race with timer signal in stackprof_start() #233
Closed
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.
I got a SEGV core dump with the stack trace as follows:
Notice that
threadid=0in the top frame -- the SEGV comes from insidelibc as it tries to dereference
threadid.The signal comes from stackprof's signal handler:
During stackprof_start(),
_stackprof.target_threadis 0.You can recreate the stack trace in the crash with a program that does
pthread_kill(0, SIGALRM):Only set
runningafter target_thread is set to avoid this crash incase the timer expires after
settimer()but before settingtarget_thread.Also, since the ordering is important here, make
runningvolatile sig_atomic_tto prevent the compiler from doing unwantedreordering.