From e5e6a7838b06f884bb36f217c7c439196579da17 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Wed, 30 Oct 2019 00:12:11 +0900 Subject: [PATCH] axfer: return ETIMEDOUT when no event occurs after waiter expiration Although the waiter abstraction handles timeout as success, it should report for callers to know timeout. This commit takes the waiter to return -ETIMEDOUT when timeout expires. Signed-off-by: Takashi Sakamoto Signed-off-by: Jaroslav Kysela --- axfer/xfer-libasound.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/axfer/xfer-libasound.c b/axfer/xfer-libasound.c index f813024..00ff028 100644 --- a/axfer/xfer-libasound.c +++ b/axfer/xfer-libasound.c @@ -343,21 +343,28 @@ static int prepare_waiter(struct libasound_state *state) int xfer_libasound_wait_event(struct libasound_state *state, int timeout_msec, unsigned short *revents) { - int err; + int count; if (state->waiter_type != WAITER_TYPE_DEFAULT) { struct waiter_context *waiter = state->waiter; + int err; - err = waiter_context_wait_event(waiter, timeout_msec); - if (err < 0) - return err; + count = waiter_context_wait_event(waiter, timeout_msec); + if (count < 0) + return count; + if (count == 0 && timeout_msec > 0) + return -ETIMEDOUT; err = snd_pcm_poll_descriptors_revents(state->handle, waiter->pfds, waiter->pfd_count, revents); - } else { - err = snd_pcm_wait(state->handle, timeout_msec); if (err < 0) return err; + } else { + count = snd_pcm_wait(state->handle, timeout_msec); + if (count < 0) + return count; + if (count == 0 && timeout_msec > 0) + return -ETIMEDOUT; if (snd_pcm_stream(state->handle) == SND_PCM_STREAM_PLAYBACK) *revents = POLLOUT; @@ -365,7 +372,7 @@ int xfer_libasound_wait_event(struct libasound_state *state, int timeout_msec, *revents = POLLIN; } - return err; + return 0; } static int configure_hw_params(struct libasound_state *state,