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(a)redhat.com>
---
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