Make trickle multithread version signal safe#4
Open
lano1106 wants to merge 3 commits intomariusae:masterfrom
Open
Make trickle multithread version signal safe#4lano1106 wants to merge 3 commits intomariusae:masterfrom
lano1106 wants to merge 3 commits intomariusae:masterfrom
Conversation
Because, select(),poll(), read(), write() and many other overloaded functions are normally reentrant from signal handlers, we need to block all signals while we hold mutex or else we can deadlock. Modified Makefile.am because while make did not build libtrickle.so, 'make install' was trying to install it. I'm really shooting in the dark for autoconf problem so maybe it is not the best way to resolve the problem.
Contributor
Author
|
There is still some rework to do. oset should be private to every thread. thread B could overwrite oset while thread A has the mutex. |
With the help of a set of macros, oset is now an automatic variable on the stack of each thread instead of an unprotected global var. The modif compiles but is not tested yet. I will launch an endurance test and report back every few days how things go.
Need to be explicit on where to find the symbol. When called, the libpthread may or may not be loaded. I have seen segfaut inside the call to safe_vprintf() from errx() when dlsym fail.
Contributor
Author
|
I have been using this patch for over a month with the bitcoin client and trickle has never been that stable. I am 100% confident that this patch is ok. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Because, select(),poll(), read(), write() and many other overloaded functions are
normally reentrant from signal handlers, we need to block all signals while we hold
mutex or else we can deadlock.
Modified Makefile.am because while make did not build libtrickle.so,
'make install' was trying to install it. I'm really shooting in the dark for
autoconf problem so maybe it is not the best way to resolve the problem.