From ede0f2f633c2a0c2718004f0527bd5832041e966 Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 13 Sep 2015 10:45:55 +0000 Subject: Set woken flag when flushing so that the channel is freed, while here use the same loop construct for both loops. --- cmd-wait-for.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'cmd-wait-for.c') diff --git a/cmd-wait-for.c b/cmd-wait-for.c index 0dce438b..e38ea8f1 100644 --- a/cmd-wait-for.c +++ b/cmd-wait-for.c @@ -97,7 +97,6 @@ cmd_wait_for_add(const char *name) void cmd_wait_for_remove(struct wait_channel *wc) { - if (wc->locked) return; if (!TAILQ_EMPTY(&wc->waiters) || !wc->woken) @@ -241,7 +240,8 @@ cmd_wait_for_flush(void) if (!cmdq_free(wq)) cmdq_continue(wq); } - while ((wq = TAILQ_FIRST(&wc->lockers)) != NULL) { + wc->woken = 1; + TAILQ_FOREACH_SAFE(wq, &wc->lockers, waitentry, wq1) { TAILQ_REMOVE(&wc->lockers, wq, waitentry); if (!cmdq_free(wq)) cmdq_continue(wq); -- cgit v1.2.3