diff --git a/pipewire-alsa/alsa-plugins/ctl_pipewire.c b/pipewire-alsa/alsa-plugins/ctl_pipewire.c index ea2d50674..76eed8461 100644 --- a/pipewire-alsa/alsa-plugins/ctl_pipewire.c +++ b/pipewire-alsa/alsa-plugins/ctl_pipewire.c @@ -1359,8 +1359,8 @@ SND_CTL_PLUGIN_DEFINE_FUNC(pipewire) ctl->system = loop->system; ctl->fd = spa_system_eventfd_create(ctl->system, SPA_FD_CLOEXEC | SPA_FD_NONBLOCK); - if (ctl->fd == -1) { - err = -errno; + if (ctl->fd < 0) { + err = ctl->fd; goto error; } diff --git a/pipewire-alsa/alsa-plugins/pcm_pipewire.c b/pipewire-alsa/alsa-plugins/pcm_pipewire.c index e5043aa94..106c8a62e 100644 --- a/pipewire-alsa/alsa-plugins/pcm_pipewire.c +++ b/pipewire-alsa/alsa-plugins/pcm_pipewire.c @@ -1253,6 +1253,10 @@ static int snd_pcm_pipewire_open(snd_pcm_t **pcmp, pw_thread_loop_unlock(pw->main_loop); pw->fd = spa_system_eventfd_create(pw->system, SPA_FD_CLOEXEC | SPA_FD_NONBLOCK); + if (pw->fd < 0) { + err = pw->fd; + goto error; + } pw->io.version = SND_PCM_IOPLUG_VERSION; pw->io.name = "ALSA <-> PipeWire PCM I/O Plugin"; diff --git a/spa/plugins/support/system.c b/spa/plugins/support/system.c index 2e60d48b9..0c273ba50 100644 --- a/spa/plugins/support/system.c +++ b/spa/plugins/support/system.c @@ -190,7 +190,7 @@ static int impl_timerfd_read(void *object, int fd, uint64_t *expirations) static int impl_eventfd_create(void *object, int flags) { struct impl *impl = object; - int fl = 0, res; + int fl = 0, res, err; if (flags & SPA_FD_CLOEXEC) fl |= EFD_CLOEXEC; if (flags & SPA_FD_NONBLOCK) @@ -198,8 +198,9 @@ static int impl_eventfd_create(void *object, int flags) if (flags & SPA_FD_EVENT_SEMAPHORE) fl |= EFD_SEMAPHORE; res = eventfd(0, fl); + err = -errno; /* save errno in case it is overwritten before return */ spa_log_debug(impl->log, "%p: new fd:%d", impl, res); - return res < 0 ? -errno : res; + return res < 0 ? err : res; } static int impl_eventfd_write(void *object, int fd, uint64_t count)