Fix race condition when waiting for functions #304
Merged
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.
Without the added lock of the message mutex it can happen that the calling thread wakes up and checks the completion condition in
waitForMessagesInternal()
, but the runner engine finishes and signals the condition variable inprocessFunctions()
before the calling thread enters waiting state again.This is a race condition and it is hard to catch it in a unit test.
This lock was already introduced in 58cb4bb as part of #91, but has been reverted in b9f2f34 before the merge. There was a comment in psoetens#3 (comment) that explains why the revert was needed, which also leaves the question open whether to keep the lock in
processFunctions()
: