horus: Work around race in cover:is_compiled/1
#28
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.
Why
The
cover:call/1
internal checks if the cover server is running and starts it if it's not:However, there is no lock between the check and
the start. Therefore, any concurrent uses of this code may cause a
badmatch
crash on{ok,_} = start()
because it might have been started in parallel and the function returns thealready_started
error.How
To work around the problem, we catch the
badmatch
and retry once after a sleep of 100 ms. We don't try to catch any exception from that second attempt.