mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
pipewire-alsa: Propagate errors from eventfd().
Propagate the error if spa_system_eventfd_create() fails. Also copy errno before calling spa_log_debug() in spa_system_eventfd_create() to make sure it is not overwritten.
This commit is contained in:
parent
b3e3d301c0
commit
e78e97cb99
3 changed files with 9 additions and 4 deletions
|
|
@ -1359,8 +1359,8 @@ SND_CTL_PLUGIN_DEFINE_FUNC(pipewire)
|
||||||
|
|
||||||
ctl->system = loop->system;
|
ctl->system = loop->system;
|
||||||
ctl->fd = spa_system_eventfd_create(ctl->system, SPA_FD_CLOEXEC | SPA_FD_NONBLOCK);
|
ctl->fd = spa_system_eventfd_create(ctl->system, SPA_FD_CLOEXEC | SPA_FD_NONBLOCK);
|
||||||
if (ctl->fd == -1) {
|
if (ctl->fd < 0) {
|
||||||
err = -errno;
|
err = ctl->fd;
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1260,6 +1260,10 @@ static int snd_pcm_pipewire_open(snd_pcm_t **pcmp,
|
||||||
pw_thread_loop_unlock(pw->main_loop);
|
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_CLOEXEC | SPA_FD_NONBLOCK);
|
||||||
|
if (pw->fd < 0) {
|
||||||
|
err = pw->fd;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
pw->io.version = SND_PCM_IOPLUG_VERSION;
|
pw->io.version = SND_PCM_IOPLUG_VERSION;
|
||||||
pw->io.name = "ALSA <-> PipeWire PCM I/O Plugin";
|
pw->io.name = "ALSA <-> PipeWire PCM I/O Plugin";
|
||||||
|
|
|
||||||
|
|
@ -191,7 +191,7 @@ static int impl_timerfd_read(void *object, int fd, uint64_t *expirations)
|
||||||
static int impl_eventfd_create(void *object, int flags)
|
static int impl_eventfd_create(void *object, int flags)
|
||||||
{
|
{
|
||||||
struct impl *impl = object;
|
struct impl *impl = object;
|
||||||
int fl = 0, res;
|
int fl = 0, res, err;
|
||||||
if (flags & SPA_FD_CLOEXEC)
|
if (flags & SPA_FD_CLOEXEC)
|
||||||
fl |= EFD_CLOEXEC;
|
fl |= EFD_CLOEXEC;
|
||||||
if (flags & SPA_FD_NONBLOCK)
|
if (flags & SPA_FD_NONBLOCK)
|
||||||
|
|
@ -199,8 +199,9 @@ static int impl_eventfd_create(void *object, int flags)
|
||||||
if (flags & SPA_FD_EVENT_SEMAPHORE)
|
if (flags & SPA_FD_EVENT_SEMAPHORE)
|
||||||
fl |= EFD_SEMAPHORE;
|
fl |= EFD_SEMAPHORE;
|
||||||
res = eventfd(0, fl);
|
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);
|
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)
|
static int impl_eventfd_write(void *object, int fd, uint64_t count)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue