mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
alsa: use semaphore semantics for the eventfd
Because we write from multiple threads, a thread might write a second wakeup and a concurrent thread might remove all wakeups before seeing it's error and retrying, which would leave the eventfd in a wrong state. With a semaphore, things balance out and the eventfd always ends up in a consistent state.
This commit is contained in:
parent
a30c27dce0
commit
6ab10237cd
1 changed files with 2 additions and 1 deletions
|
|
@ -1262,7 +1262,8 @@ static int snd_pcm_pipewire_open(snd_pcm_t **pcmp,
|
|||
pw_core_add_listener(pw->core, &pw->core_listener, &core_events, pw);
|
||||
pw_thread_loop_unlock(pw->main_loop);
|
||||
|
||||
pw->fd = spa_system_eventfd_create(pw->system, SPA_FD_CLOEXEC | SPA_FD_NONBLOCK);
|
||||
pw->fd = spa_system_eventfd_create(pw->system,
|
||||
SPA_FD_EVENT_SEMAPHORE | SPA_FD_CLOEXEC | SPA_FD_NONBLOCK);
|
||||
if (pw->fd < 0) {
|
||||
err = pw->fd;
|
||||
goto error;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue