diff --git a/nx/source/services/audout.c b/nx/source/services/audout.c index c1d6ac8c..24b260ce 100644 --- a/nx/source/services/audout.c +++ b/nx/source/services/audout.c @@ -105,12 +105,19 @@ static Result _audoutCmdNoInOutU32(Service* srv, u32 *out, u32 cmd_id) { } Result audoutWaitPlayFinish(AudioOutBuffer **released, u32* released_count, u64 timeout) { - // Wait on the buffer event handle - Result rc = eventWait(&g_audoutBufferEvent, timeout); + // Check if we already have a buffer free + eventClear(&g_audoutBufferEvent); + Result rc = audoutGetReleasedAudioOutBuffer(released, released_count); - if (R_SUCCEEDED(rc)) { - // Grab the released buffer - rc = audoutGetReleasedAudioOutBuffer(released, released_count); + // If the call didn't fail, but we don't have a buffer, wait until one is released + if (R_SUCCEEDED(rc) && !(*released_count)) { + // Wait on the buffer event handle + rc = eventWait(&g_audoutBufferEvent, timeout); + + if (R_SUCCEEDED(rc)) { + // Grab the released buffer + rc = audoutGetReleasedAudioOutBuffer(released, released_count); + } } return rc;