Prevent deadlock on pthread_exit(). #406
Open
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.
This patch fixes a deadlock issues I ran into. In a nutshell, the main thread sends a signal to the report_thread. This can lead to a deadlock: report_thread acquires sb_histogram_t->lock, gets killed, later on the main thread calls report_cumulative() which will block indefinitely trying to acquire the lock again.
I can replicate the deadlock reliably in my environment with a version of sysbench compiled from source (say 8 out of 10 runs will deadlock). The system version (Ubuntu) of sysbench seems to lock up much less frequently. In any case, the issue remains that deadlock are possible given the right sequence of events.
Instead of killing the thread forcefully, this patch uses a variable to signal when the report thread shall break out of its reporting loop. This ensures that the report thread will properly release its locks.