From: "Daniel P. Berrange" <berrange(a)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(a)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