mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
qemu: Use virDomainEventState helpers
v2: Drop libvirt_private.syms changes v3: Adjust for new virDomainEventStateNew argument
This commit is contained in:
parent
227d67ca00
commit
42a3687f29
@ -109,11 +109,7 @@ struct qemud_driver {
|
|||||||
|
|
||||||
virCapsPtr caps;
|
virCapsPtr caps;
|
||||||
|
|
||||||
/* An array of callbacks */
|
virDomainEventStatePtr domainEventState;
|
||||||
virDomainEventCallbackListPtr domainEventCallbacks;
|
|
||||||
virDomainEventQueuePtr domainEventQueue;
|
|
||||||
int domainEventTimer;
|
|
||||||
int domainEventDispatching;
|
|
||||||
|
|
||||||
char *securityDriverName;
|
char *securityDriverName;
|
||||||
virSecurityManagerPtr securityManager;
|
virSecurityManagerPtr securityManager;
|
||||||
|
@ -65,28 +65,11 @@ static void qemuDomainEventDispatchFunc(virConnectPtr conn,
|
|||||||
void qemuDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque)
|
void qemuDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque)
|
||||||
{
|
{
|
||||||
struct qemud_driver *driver = opaque;
|
struct qemud_driver *driver = opaque;
|
||||||
virDomainEventQueue tempQueue;
|
|
||||||
|
|
||||||
qemuDriverLock(driver);
|
qemuDriverLock(driver);
|
||||||
|
virDomainEventStateFlush(driver->domainEventState,
|
||||||
driver->domainEventDispatching = 1;
|
qemuDomainEventDispatchFunc,
|
||||||
|
driver);
|
||||||
/* Copy the queue, so we're reentrant safe */
|
|
||||||
tempQueue.count = driver->domainEventQueue->count;
|
|
||||||
tempQueue.events = driver->domainEventQueue->events;
|
|
||||||
driver->domainEventQueue->count = 0;
|
|
||||||
driver->domainEventQueue->events = NULL;
|
|
||||||
|
|
||||||
virEventUpdateTimeout(driver->domainEventTimer, -1);
|
|
||||||
virDomainEventQueueDispatch(&tempQueue,
|
|
||||||
driver->domainEventCallbacks,
|
|
||||||
qemuDomainEventDispatchFunc,
|
|
||||||
driver);
|
|
||||||
|
|
||||||
/* Purge any deleted callbacks */
|
|
||||||
virDomainEventCallbackListPurgeMarked(driver->domainEventCallbacks);
|
|
||||||
|
|
||||||
driver->domainEventDispatching = 0;
|
|
||||||
qemuDriverUnlock(driver);
|
qemuDriverUnlock(driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,11 +78,7 @@ void qemuDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque)
|
|||||||
void qemuDomainEventQueue(struct qemud_driver *driver,
|
void qemuDomainEventQueue(struct qemud_driver *driver,
|
||||||
virDomainEventPtr event)
|
virDomainEventPtr event)
|
||||||
{
|
{
|
||||||
if (virDomainEventQueuePush(driver->domainEventQueue,
|
virDomainEventStateQueue(driver->domainEventState, event);
|
||||||
event) < 0)
|
|
||||||
virDomainEventFree(event);
|
|
||||||
if (driver->domainEventQueue->count == 1)
|
|
||||||
virEventUpdateTimeout(driver->domainEventTimer, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -393,14 +393,12 @@ qemudStartup(int privileged) {
|
|||||||
if (virDomainObjListInit(&qemu_driver->domains) < 0)
|
if (virDomainObjListInit(&qemu_driver->domains) < 0)
|
||||||
goto out_of_memory;
|
goto out_of_memory;
|
||||||
|
|
||||||
/* Init callback list */
|
/* Init domain events */
|
||||||
if (VIR_ALLOC(qemu_driver->domainEventCallbacks) < 0)
|
qemu_driver->domainEventState = virDomainEventStateNew(qemuDomainEventFlush,
|
||||||
goto out_of_memory;
|
qemu_driver,
|
||||||
if (!(qemu_driver->domainEventQueue = virDomainEventQueueNew()))
|
NULL,
|
||||||
goto out_of_memory;
|
true);
|
||||||
|
if (!qemu_driver->domainEventState)
|
||||||
if ((qemu_driver->domainEventTimer =
|
|
||||||
virEventAddTimeout(-1, qemuDomainEventFlush, qemu_driver, NULL)) < 0)
|
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
/* Allocate bitmap for vnc port reservation */
|
/* Allocate bitmap for vnc port reservation */
|
||||||
@ -764,11 +762,7 @@ qemudShutdown(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Free domain callback list */
|
/* Free domain callback list */
|
||||||
virDomainEventCallbackListFree(qemu_driver->domainEventCallbacks);
|
virDomainEventStateFree(qemu_driver->domainEventState);
|
||||||
virDomainEventQueueFree(qemu_driver->domainEventQueue);
|
|
||||||
|
|
||||||
if (qemu_driver->domainEventTimer != -1)
|
|
||||||
virEventRemoveTimeout(qemu_driver->domainEventTimer);
|
|
||||||
|
|
||||||
if (qemu_driver->brctl)
|
if (qemu_driver->brctl)
|
||||||
brShutdown(qemu_driver->brctl);
|
brShutdown(qemu_driver->brctl);
|
||||||
@ -856,7 +850,8 @@ static int qemudClose(virConnectPtr conn) {
|
|||||||
|
|
||||||
/* Get rid of callbacks registered for this conn */
|
/* Get rid of callbacks registered for this conn */
|
||||||
qemuDriverLock(driver);
|
qemuDriverLock(driver);
|
||||||
virDomainEventCallbackListRemoveConn(conn, driver->domainEventCallbacks);
|
virDomainEventCallbackListRemoveConn(conn,
|
||||||
|
driver->domainEventState->callbacks);
|
||||||
qemuDriverUnlock(driver);
|
qemuDriverUnlock(driver);
|
||||||
|
|
||||||
conn->privateData = NULL;
|
conn->privateData = NULL;
|
||||||
@ -5651,7 +5646,8 @@ qemuDomainEventRegister(virConnectPtr conn,
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
qemuDriverLock(driver);
|
qemuDriverLock(driver);
|
||||||
ret = virDomainEventCallbackListAdd(conn, driver->domainEventCallbacks,
|
ret = virDomainEventCallbackListAdd(conn,
|
||||||
|
driver->domainEventState->callbacks,
|
||||||
callback, opaque, freecb);
|
callback, opaque, freecb);
|
||||||
qemuDriverUnlock(driver);
|
qemuDriverUnlock(driver);
|
||||||
|
|
||||||
@ -5667,12 +5663,9 @@ qemuDomainEventDeregister(virConnectPtr conn,
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
qemuDriverLock(driver);
|
qemuDriverLock(driver);
|
||||||
if (driver->domainEventDispatching)
|
ret = virDomainEventStateDeregister(conn,
|
||||||
ret = virDomainEventCallbackListMarkDelete(conn, driver->domainEventCallbacks,
|
driver->domainEventState,
|
||||||
callback);
|
callback);
|
||||||
else
|
|
||||||
ret = virDomainEventCallbackListRemove(conn, driver->domainEventCallbacks,
|
|
||||||
callback);
|
|
||||||
qemuDriverUnlock(driver);
|
qemuDriverUnlock(driver);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -5692,7 +5685,7 @@ qemuDomainEventRegisterAny(virConnectPtr conn,
|
|||||||
|
|
||||||
qemuDriverLock(driver);
|
qemuDriverLock(driver);
|
||||||
ret = virDomainEventCallbackListAddID(conn,
|
ret = virDomainEventCallbackListAddID(conn,
|
||||||
driver->domainEventCallbacks,
|
driver->domainEventState->callbacks,
|
||||||
dom, eventID,
|
dom, eventID,
|
||||||
callback, opaque, freecb);
|
callback, opaque, freecb);
|
||||||
qemuDriverUnlock(driver);
|
qemuDriverUnlock(driver);
|
||||||
@ -5709,12 +5702,9 @@ qemuDomainEventDeregisterAny(virConnectPtr conn,
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
qemuDriverLock(driver);
|
qemuDriverLock(driver);
|
||||||
if (driver->domainEventDispatching)
|
ret = virDomainEventStateDeregisterAny(conn,
|
||||||
ret = virDomainEventCallbackListMarkDeleteID(conn, driver->domainEventCallbacks,
|
driver->domainEventState,
|
||||||
callbackID);
|
callbackID);
|
||||||
else
|
|
||||||
ret = virDomainEventCallbackListRemoveID(conn, driver->domainEventCallbacks,
|
|
||||||
callbackID);
|
|
||||||
qemuDriverUnlock(driver);
|
qemuDriverUnlock(driver);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
Reference in New Issue
Block a user