[fix] stop worker thread properly on TuioClient disconnect (win only) #10
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.
I think there is one major disadvantage of TuioClient::disconnect().
It's not synchronous. So after it returns there is no guarantee that client has disconnected.
This can lead in undesirable consequences. For example, take a look at this snippet:
This snippet can lead to segfault or zombie working thread because of TuioClient destructor call and internal structures cleanup while the working thread is still running.
This PR makes TuioClient::disconnect() synchronous. The main idea is that we use
TUIO11_CPP/oscpack/ip/win32/UdpSocket.cpp
Line 499 in 7d5dd6d
TUIO11_CPP/oscpack/ip/win32/UdpSocket.cpp
Line 502 in 7d5dd6d
TUIO11_CPP/oscpack/ip/win32/UdpSocket.cpp
Line 448 in 7d5dd6d
and after we wait for thread finish using WaitForSingleObject().
Using just
TUIO11_CPP/oscpack/ip/win32/UdpSocket.cpp
Line 494 in 7d5dd6d
TUIO11_CPP/oscpack/ip/win32/NetworkingUtils.cpp
Line 74 in 7d5dd6d
TUIO11_CPP/oscpack/ip/win32/UdpSocket.cpp
Line 448 in 7d5dd6d
This edit is just for Win because I have no opportunity to test it on Unix...
Feel free to comment.
Ivan