From d8db090ac23dc31d6594fbd449d4c3471007957c Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 12 Nov 2018 15:52:11 +0100 Subject: [PATCH] alsa: only remove sources when they were added --- spa/plugins/alsa/alsa-utils.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/spa/plugins/alsa/alsa-utils.c b/spa/plugins/alsa/alsa-utils.c index 454ba8756..977ae45bc 100644 --- a/spa/plugins/alsa/alsa-utils.c +++ b/spa/plugins/alsa/alsa-utils.c @@ -492,11 +492,13 @@ static int set_timeout(struct state *state, size_t extra) { struct itimerspec ts; - calc_timeout(state->filled + extra, state->threshold, state->rate, &state->now, &ts.it_value); + if (!state->slaved) { + calc_timeout(state->filled + extra, state->threshold, state->rate, &state->now, &ts.it_value); - ts.it_interval.tv_sec = 0; - ts.it_interval.tv_nsec = ((size_t)state->threshold * SPA_NSEC_PER_SEC) / state->rate; - timerfd_settime(state->timerfd, TFD_TIMER_ABSTIME, &ts, NULL); + ts.it_interval.tv_sec = 0; + ts.it_interval.tv_nsec = ((size_t)state->threshold * SPA_NSEC_PER_SEC) / state->rate; + timerfd_settime(state->timerfd, TFD_TIMER_ABSTIME, &ts, NULL); + } return 0; } @@ -962,12 +964,14 @@ static int do_remove_source(struct spa_loop *loop, struct state *state = user_data; struct itimerspec ts; - spa_loop_remove_source(state->data_loop, &state->source); - ts.it_value.tv_sec = 0; - ts.it_value.tv_nsec = 0; - ts.it_interval.tv_sec = 0; - ts.it_interval.tv_nsec = 0; - timerfd_settime(state->timerfd, 0, &ts, NULL); + if (!state->slaved) { + spa_loop_remove_source(state->data_loop, &state->source); + ts.it_value.tv_sec = 0; + ts.it_value.tv_nsec = 0; + ts.it_interval.tv_sec = 0; + ts.it_interval.tv_nsec = 0; + timerfd_settime(state->timerfd, 0, &ts, NULL); + } return 0; }