]> xenbits.xensource.com Git - libvirt.git/commitdiff
De-duplicate code into virObjectEventStateCleanupTimer()
authorMartin Kletzander <mkletzan@redhat.com>
Tue, 11 Oct 2016 11:35:18 +0000 (13:35 +0200)
committerMartin Kletzander <mkletzan@redhat.com>
Wed, 12 Oct 2016 10:54:47 +0000 (12:54 +0200)
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@redhat.com>
src/conf/object_event.c

index 1ef8b58d10c3ea525ad39f779e265c4a58d4131f..8f2c2d0f2083a0eb2561e4493e04738db21fe438 100644 (file)
@@ -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;