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 <mkletzan@xxxxxxxxxx> --- 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 5994c2574d6f..b71960f3399d 100644 --- a/src/conf/object_event.c +++ b/src/conf/object_event.c @@ -784,6 +784,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) { virObjectEventQueue tempQueue; @@ -884,12 +903,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); @@ -924,12 +939,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; -- 2.10.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list