提交 1ded8942 编写于 作者: C Cole Robinson

lxc: Use virDomainEventState helpers

v3:
    Adjust for new virDomainEventStateNew argument
上级 42a3687f
...@@ -55,11 +55,7 @@ struct __lxc_driver { ...@@ -55,11 +55,7 @@ struct __lxc_driver {
int log_libvirtd; int log_libvirtd;
int have_netns; int have_netns;
/* An array of callbacks */ virDomainEventStatePtr domainEventState;
virDomainEventCallbackListPtr domainEventCallbacks;
virDomainEventQueuePtr domainEventQueue;
int domainEventTimer;
int domainEventDispatching;
}; };
int lxcLoadDriverConfig(lxc_driver_t *driver); int lxcLoadDriverConfig(lxc_driver_t *driver);
......
...@@ -159,7 +159,8 @@ static int lxcClose(virConnectPtr conn) ...@@ -159,7 +159,8 @@ static int lxcClose(virConnectPtr conn)
lxc_driver_t *driver = conn->privateData; lxc_driver_t *driver = conn->privateData;
lxcDriverLock(driver); lxcDriverLock(driver);
virDomainEventCallbackListRemoveConn(conn, driver->domainEventCallbacks); virDomainEventCallbackListRemoveConn(conn,
driver->domainEventState->callbacks);
lxcDriverUnlock(driver); lxcDriverUnlock(driver);
conn->privateData = NULL; conn->privateData = NULL;
...@@ -1648,7 +1649,8 @@ lxcDomainEventRegister(virConnectPtr conn, ...@@ -1648,7 +1649,8 @@ lxcDomainEventRegister(virConnectPtr conn,
int ret; int ret;
lxcDriverLock(driver); lxcDriverLock(driver);
ret = virDomainEventCallbackListAdd(conn, driver->domainEventCallbacks, ret = virDomainEventCallbackListAdd(conn,
driver->domainEventState->callbacks,
callback, opaque, freecb); callback, opaque, freecb);
lxcDriverUnlock(driver); lxcDriverUnlock(driver);
...@@ -1664,12 +1666,9 @@ lxcDomainEventDeregister(virConnectPtr conn, ...@@ -1664,12 +1666,9 @@ lxcDomainEventDeregister(virConnectPtr conn,
int ret; int ret;
lxcDriverLock(driver); lxcDriverLock(driver);
if (driver->domainEventDispatching) ret = virDomainEventStateDeregister(conn,
ret = virDomainEventCallbackListMarkDelete(conn, driver->domainEventCallbacks, driver->domainEventState,
callback); callback);
else
ret = virDomainEventCallbackListRemove(conn, driver->domainEventCallbacks,
callback);
lxcDriverUnlock(driver); lxcDriverUnlock(driver);
return ret; return ret;
...@@ -1689,7 +1688,7 @@ lxcDomainEventRegisterAny(virConnectPtr conn, ...@@ -1689,7 +1688,7 @@ lxcDomainEventRegisterAny(virConnectPtr conn,
lxcDriverLock(driver); lxcDriverLock(driver);
ret = virDomainEventCallbackListAddID(conn, ret = virDomainEventCallbackListAddID(conn,
driver->domainEventCallbacks, driver->domainEventState->callbacks,
dom, eventID, dom, eventID,
callback, opaque, freecb); callback, opaque, freecb);
lxcDriverUnlock(driver); lxcDriverUnlock(driver);
...@@ -1706,12 +1705,9 @@ lxcDomainEventDeregisterAny(virConnectPtr conn, ...@@ -1706,12 +1705,9 @@ lxcDomainEventDeregisterAny(virConnectPtr conn,
int ret; int ret;
lxcDriverLock(driver); lxcDriverLock(driver);
if (driver->domainEventDispatching) ret = virDomainEventStateDeregisterAny(conn,
ret = virDomainEventCallbackListMarkDeleteID(conn, driver->domainEventCallbacks, driver->domainEventState,
callbackID); callbackID);
else
ret = virDomainEventCallbackListRemoveID(conn, driver->domainEventCallbacks,
callbackID);
lxcDriverUnlock(driver); lxcDriverUnlock(driver);
return ret; return ret;
...@@ -1736,28 +1732,11 @@ static void lxcDomainEventDispatchFunc(virConnectPtr conn, ...@@ -1736,28 +1732,11 @@ static void lxcDomainEventDispatchFunc(virConnectPtr conn,
static void lxcDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque) static void lxcDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque)
{ {
lxc_driver_t *driver = opaque; lxc_driver_t *driver = opaque;
virDomainEventQueue tempQueue;
lxcDriverLock(driver); lxcDriverLock(driver);
virDomainEventStateFlush(driver->domainEventState,
driver->domainEventDispatching = 1; lxcDomainEventDispatchFunc,
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,
lxcDomainEventDispatchFunc,
driver);
/* Purge any deleted callbacks */
virDomainEventCallbackListPurgeMarked(driver->domainEventCallbacks);
driver->domainEventDispatching = 0;
lxcDriverUnlock(driver); lxcDriverUnlock(driver);
} }
...@@ -1766,11 +1745,7 @@ static void lxcDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque) ...@@ -1766,11 +1745,7 @@ static void lxcDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque)
static void lxcDomainEventQueue(lxc_driver_t *driver, static void lxcDomainEventQueue(lxc_driver_t *driver,
virDomainEventPtr event) virDomainEventPtr event)
{ {
if (virDomainEventQueuePush(driver->domainEventQueue, virDomainEventStateQueue(driver->domainEventState, event);
event) < 0)
virDomainEventFree(event);
if (lxc_driver->domainEventQueue->count == 1)
virEventUpdateTimeout(driver->domainEventTimer, 0);
} }
/** /**
...@@ -1985,13 +1960,11 @@ static int lxcStartup(int privileged) ...@@ -1985,13 +1960,11 @@ static int lxcStartup(int privileged)
if (virDomainObjListInit(&lxc_driver->domains) < 0) if (virDomainObjListInit(&lxc_driver->domains) < 0)
goto cleanup; goto cleanup;
if (VIR_ALLOC(lxc_driver->domainEventCallbacks) < 0) lxc_driver->domainEventState = virDomainEventStateNew(lxcDomainEventFlush,
goto cleanup; lxc_driver,
if (!(lxc_driver->domainEventQueue = virDomainEventQueueNew())) NULL,
goto cleanup; true);
if (!lxc_driver->domainEventState)
if ((lxc_driver->domainEventTimer =
virEventAddTimeout(-1, lxcDomainEventFlush, lxc_driver, NULL)) < 0)
goto cleanup; goto cleanup;
lxc_driver->log_libvirtd = 0; /* by default log to container logfile */ lxc_driver->log_libvirtd = 0; /* by default log to container logfile */
...@@ -2083,12 +2056,7 @@ static int lxcShutdown(void) ...@@ -2083,12 +2056,7 @@ static int lxcShutdown(void)
lxcDriverLock(lxc_driver); lxcDriverLock(lxc_driver);
virDomainObjListDeinit(&lxc_driver->domains); virDomainObjListDeinit(&lxc_driver->domains);
virDomainEventStateFree(lxc_driver->domainEventState);
virDomainEventCallbackListFree(lxc_driver->domainEventCallbacks);
virDomainEventQueueFree(lxc_driver->domainEventQueue);
if (lxc_driver->domainEventTimer != -1)
virEventRemoveTimeout(lxc_driver->domainEventTimer);
virCapabilitiesFree(lxc_driver->caps); virCapabilitiesFree(lxc_driver->caps);
VIR_FREE(lxc_driver->configDir); VIR_FREE(lxc_driver->configDir);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册