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

Prevent deadlock on pthread_exit(). #406

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

thomasknauth
Copy link

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.

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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant