From 6fecf9523a1c05fa71e7c4713282ae59c5e670d4 Mon Sep 17 00:00:00 2001 From: Martin Kletzander Date: Tue, 11 Oct 2016 13:35:18 +0200 Subject: [PATCH] De-duplicate code into virObjectEventStateCleanupTimer() There is a repeating pattern of code that removes the timer if it's not needed. So let's move it to a new function. We'll also use it later. Signed-off-by: Martin Kletzander --- src/conf/object_event.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/conf/object_event.c b/src/conf/object_event.c index 1ef8b58d10..8f2c2d0f20 100644 --- a/src/conf/object_event.c +++ b/src/conf/object_event.c @@ -783,6 +783,25 @@ virObjectEventStateQueue(virObjectEventStatePtr state, } +static void +virObjectEventStateCleanupTimer(virObjectEventStatePtr state, bool clear_queue) +{ + /* There are still some callbacks, keep the timer. */ + if (state->callbacks->count) + return; + + /* The timer is not registered, nothing to do. */ + if (state->timer == -1) + return; + + virEventRemoveTimeout(state->timer); + state->timer = -1; + + if (clear_queue) + virObjectEventQueueClear(state->queue); +} + + static void virObjectEventStateFlush(virObjectEventStatePtr state) { @@ -886,12 +905,8 @@ virObjectEventStateRegisterID(virConnectPtr conn, cb, opaque, freecb, legacy, callbackID, serverFilter); - if (ret == -1 && - state->callbacks->count == 0 && - state->timer != -1) { - virEventRemoveTimeout(state->timer); - state->timer = -1; - } + if (ret < 0) + virObjectEventStateCleanupTimer(state, false); cleanup: virObjectUnlock(state); @@ -926,12 +941,7 @@ virObjectEventStateDeregisterID(virConnectPtr conn, ret = virObjectEventCallbackListRemoveID(conn, state->callbacks, callbackID); - if (state->callbacks->count == 0 && - state->timer != -1) { - virEventRemoveTimeout(state->timer); - state->timer = -1; - virObjectEventQueueClear(state->queue); - } + virObjectEventStateCleanupTimer(state, true); virObjectUnlock(state); return ret;