fix DeadLock when it called unregisterConnector twice in same time.#2874
Closed
imtnd wants to merge 2 commits intopocoproject:masterfrom
Closed
fix DeadLock when it called unregisterConnector twice in same time.#2874imtnd wants to merge 2 commits intopocoproject:masterfrom
imtnd wants to merge 2 commits intopocoproject:masterfrom
Conversation
Member
|
please re-submit against poco-1.10.0 branch, we do not accept PRs into master. Thank you! |
Author
|
I will re-submit against poco-1.10.0. |
Closed
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.
fix a dead lock when called unregisterConnector twice in same time.
lock 1:
When socket connected:
NObserver::notify(Notification* pNf) <- lock
SocketConnector::onWritable(WritableNotification* pNotification)
SocketConnector::onConnect()
SocketConnector::unregisterConnector()
SocketReactor::removeEventHandler(const Socket& socket, const Poco::AbstractObserver& observer) <- wait to unlock
When delete SocketConnector:
SocketConnector::~SocketConnector()
SocketConnector::unregisterConnector() <- lock
SocketReactor::removeEventHandler(const Socket& socket, const Poco::AbstractObserver& observer)
SocketNotifier::removeObserver(SocketReactor* pReactor, const Poco::AbstractObserver& observer)
NotificationCenter::removeObserver(const AbstractObserver& observer)
NObserver::disable() <- wait to unlock
Test code maybe execute only on my machine.
I will remove test code if you don't need it.