[libvirt] [PATCH 2/6] Warn if requesting update to non-existant timer/handle watch

Daniel P. Berrange berrange at redhat.com
Thu Nov 22 16:48:29 UTC 2012


From: "Daniel P. Berrange" <berrange at redhat.com>

The event code is a no-op if requested to update a non-existant
timer/handle watch. This makes it hard to detect bugs in the
caller who have passed bogus data. Add a VIR_WARN output in
such cases, since the API does not allow for return errors.

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 src/util/event_poll.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/util/event_poll.c b/src/util/event_poll.c
index 276d66d..2ffa94b 100644
--- a/src/util/event_poll.c
+++ b/src/util/event_poll.c
@@ -141,6 +141,7 @@ int virEventPollAddHandle(int fd, int events,
 
 void virEventPollUpdateHandle(int watch, int events) {
     int i;
+    bool found = false;
     PROBE(EVENT_POLL_UPDATE_HANDLE,
           "watch=%d events=%d",
           watch, events);
@@ -156,10 +157,14 @@ void virEventPollUpdateHandle(int watch, int events) {
             eventLoop.handles[i].events =
                     virEventPollToNativeEvents(events);
             virEventPollInterruptLocked();
+            found = true;
             break;
         }
     }
     virMutexUnlock(&eventLoop.lock);
+
+    if (!found)
+        VIR_WARN("Got update for non-existant handle watch %d", watch);
 }
 
 /*
@@ -249,6 +254,7 @@ void virEventPollUpdateTimeout(int timer, int frequency)
 {
     unsigned long long now;
     int i;
+    bool found = false;
     PROBE(EVENT_POLL_UPDATE_TIMEOUT,
           "timer=%d frequency=%d",
           timer, frequency);
@@ -268,11 +274,17 @@ void virEventPollUpdateTimeout(int timer, int frequency)
             eventLoop.timeouts[i].frequency = frequency;
             eventLoop.timeouts[i].expiresAt =
                 frequency >= 0 ? frequency + now : 0;
+            VIR_DEBUG("Set timer freq=%d expirs=%llu", frequency,
+                      eventLoop.timeouts[i].expiresAt);
             virEventPollInterruptLocked();
+            found = true;
             break;
         }
     }
     virMutexUnlock(&eventLoop.lock);
+
+    if (!found)
+        VIR_WARN("Got update for non-existant timer %d", timer);
 }
 
 /*
@@ -336,6 +348,7 @@ static int virEventPollCalculateTimeout(int *timeout) {
         if (virTimeMillisNow(&now) < 0)
             return -1;
 
+        EVENT_DEBUG("Schedule timeout then=%llu now=%llu", then, now);
         *timeout = then - now;
         if (*timeout < 0)
             *timeout = 0;
-- 
1.7.11.2




More information about the libvir-list mailing list