qemu: Use virDomainEventState helpers

v2:
    Drop libvirt_private.syms changes

v3:
    Adjust for new virDomainEventStateNew argument
This commit is contained in:
Cole Robinson 2011-05-12 08:54:07 -04:00
parent 227d67ca00
commit 42a3687f29
3 changed files with 23 additions and 58 deletions

View File

@ -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;

View File

@ -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);
} }

View File

@ -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;