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.
It can be hard to ensure
play*
never is running simultaneously from multiple threads (which would result in scrambled sound output).The following wouldn't work:
...because it is possible that
*playing*
is set to false and yetplay*
is still engaged in IO operations:clj-audio/src/clj_audio/core.clj
Lines 157 to 162 in b245047
In the snippet above,
.write
and.read
are blocking calls, so probably you can see there's a chance for race conditions.This PR introduces a finer-grained variable, so one can:
Of course, one could prevent concurrent calls from the consumer side, but it also seems nice to provide a generic opt-in mechanism.