diff options
author | Chris Robinson <[email protected]> | 2018-02-01 18:09:16 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2018-02-01 18:20:14 -0800 |
commit | e240351d81105e233f02d006f6bf42d03c0dd09b (patch) | |
tree | cfa0d4b2f59bae0ed1ba44a220ba0a9ecdb8f97b /Alc/mixer.c | |
parent | 4ec31291c0de9334f6715edc13bf2d28ea884eb0 (diff) |
Use a semaphore to signal the event handler
Semaphores allow for semi-persistent signals, compared to a condition variable
which requires a mutex for proper detection. A semaphore can be 'post'ed after
writing some data on one thread, and another thread will be able to recognize
it quickly even if the post occured in between checking for data and waiting.
This more correctly fixes a race condition with events since the mixer
shouldn't be using mutexes, and arbitrary wake-ups just to make sure an event
wasn't missed was quite inefficient.
Diffstat (limited to 'Alc/mixer.c')
-rw-r--r-- | Alc/mixer.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/Alc/mixer.c b/Alc/mixer.c index 31e94974..c34284d5 100644 --- a/Alc/mixer.c +++ b/Alc/mixer.c @@ -754,7 +754,7 @@ ALboolean MixSource(ALvoice *voice, ALuint SourceID, ALCcontext *Context, ALsize AL_EVENT_TYPE_BUFFER_COMPLETED_SOFT, SourceID, 0, "Buffer completed" ); } while(--buffers_done > 0); - alcnd_signal(&Context->EventCnd); + alsem_post(&Context->EventSem); } return isplaying; |