From: Takashi Sakamoto Date: Tue, 29 Oct 2019 15:12:11 +0000 (+0900) Subject: axfer: return ETIMEDOUT when no event occurs after waiter expiration X-Git-Tag: v1.2.1~9 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=e5e6a7838b06f884bb36f217c7c439196579da17;p=alsa-utils.git 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 --- 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,