mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-11 15:27:47 +00:00
Warn if requesting update to non-existent timer/handle watch
The event code is a no-op if requested to update a non-existent 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@redhat.com>
This commit is contained in:
parent
81d6c4defe
commit
39064f0ff9
@ -141,6 +141,7 @@ int virEventPollAddHandle(int fd, int events,
|
|||||||
|
|
||||||
void virEventPollUpdateHandle(int watch, int events) {
|
void virEventPollUpdateHandle(int watch, int events) {
|
||||||
int i;
|
int i;
|
||||||
|
bool found = false;
|
||||||
PROBE(EVENT_POLL_UPDATE_HANDLE,
|
PROBE(EVENT_POLL_UPDATE_HANDLE,
|
||||||
"watch=%d events=%d",
|
"watch=%d events=%d",
|
||||||
watch, events);
|
watch, events);
|
||||||
@ -156,10 +157,14 @@ void virEventPollUpdateHandle(int watch, int events) {
|
|||||||
eventLoop.handles[i].events =
|
eventLoop.handles[i].events =
|
||||||
virEventPollToNativeEvents(events);
|
virEventPollToNativeEvents(events);
|
||||||
virEventPollInterruptLocked();
|
virEventPollInterruptLocked();
|
||||||
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
virMutexUnlock(&eventLoop.lock);
|
virMutexUnlock(&eventLoop.lock);
|
||||||
|
|
||||||
|
if (!found)
|
||||||
|
VIR_WARN("Got update for non-existent handle watch %d", watch);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -249,6 +254,7 @@ void virEventPollUpdateTimeout(int timer, int frequency)
|
|||||||
{
|
{
|
||||||
unsigned long long now;
|
unsigned long long now;
|
||||||
int i;
|
int i;
|
||||||
|
bool found = false;
|
||||||
PROBE(EVENT_POLL_UPDATE_TIMEOUT,
|
PROBE(EVENT_POLL_UPDATE_TIMEOUT,
|
||||||
"timer=%d frequency=%d",
|
"timer=%d frequency=%d",
|
||||||
timer, frequency);
|
timer, frequency);
|
||||||
@ -268,11 +274,17 @@ void virEventPollUpdateTimeout(int timer, int frequency)
|
|||||||
eventLoop.timeouts[i].frequency = frequency;
|
eventLoop.timeouts[i].frequency = frequency;
|
||||||
eventLoop.timeouts[i].expiresAt =
|
eventLoop.timeouts[i].expiresAt =
|
||||||
frequency >= 0 ? frequency + now : 0;
|
frequency >= 0 ? frequency + now : 0;
|
||||||
|
VIR_DEBUG("Set timer freq=%d expires=%llu", frequency,
|
||||||
|
eventLoop.timeouts[i].expiresAt);
|
||||||
virEventPollInterruptLocked();
|
virEventPollInterruptLocked();
|
||||||
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
virMutexUnlock(&eventLoop.lock);
|
virMutexUnlock(&eventLoop.lock);
|
||||||
|
|
||||||
|
if (!found)
|
||||||
|
VIR_WARN("Got update for non-existent timer %d", timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -336,6 +348,7 @@ static int virEventPollCalculateTimeout(int *timeout) {
|
|||||||
if (virTimeMillisNow(&now) < 0)
|
if (virTimeMillisNow(&now) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
EVENT_DEBUG("Schedule timeout then=%llu now=%llu", then, now);
|
||||||
*timeout = then - now;
|
*timeout = then - now;
|
||||||
if (*timeout < 0)
|
if (*timeout < 0)
|
||||||
*timeout = 0;
|
*timeout = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user