Bugfix: Deadlock in zlog_fini() while entering pthread_rwlock_wrlock() in multithreaded environment #184
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.
The freeze happened in zlog_fini() while entering the final pthread_rwlock_wrlock(). This happens to me in a multithreaded binary.
Had a hard time to identify this deadlock. However, I did not find the root cause since all trace messages regarding entering/leaving the lock did not lead to a root cause problem.
Was initially thinking that this glibc bug could have been the root cause but the problem described there was not exactly the problem I was facing.
However the the inital pthread_rwlock_trywrlock() is mandatory to not run into the deadlock. Additionally EDEADLK and EBUSY needs to be handled correctly to prevent the lock.
With this fix it was possible for me to stop/start my application for around 26000 times over the weekend without any deadlock.