From e940361c947cf8519b11c7e6792441c86fc59042 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 12 Oct 2023 15:28:53 +0200 Subject: [PATCH] alsa: don't check early wakeup when PCM stopped When the PCM is stopped, don't check for early wakeup because if we are early, we will never be on time in the next iteration either because the PCM is stopped and doesn't advance. Also don't try to align when stopped. See #3565 --- spa/plugins/alsa/alsa-pcm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spa/plugins/alsa/alsa-pcm.c b/spa/plugins/alsa/alsa-pcm.c index 57e7911e7..ddf79f05a 100644 --- a/spa/plugins/alsa/alsa-pcm.c +++ b/spa/plugins/alsa/alsa-pcm.c @@ -2408,7 +2408,7 @@ static int alsa_write_sync(struct state *state, uint64_t current_time) return res; } - if (SPA_UNLIKELY(!following && delay > target + state->max_error)) { + if (SPA_UNLIKELY(!following && state->alsa_started && delay > target + state->max_error)) { spa_log_trace(state->log, "%p: early wakeup %ld %lu %lu", state, avail, delay, target); if (delay > target * 3) @@ -2419,7 +2419,7 @@ static int alsa_write_sync(struct state *state, uint64_t current_time) if (SPA_UNLIKELY((res = update_time(state, current_time, delay, target, following)) < 0)) return res; - if (following && !state->linked) { + if (following && state->alsa_started && !state->linked) { if (SPA_UNLIKELY(state->alsa_sync)) { enum spa_log_level lev;