mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-10-21 05:29:18 +00:00
lxc: Use virDomainEventState helpers
v3: Adjust for new virDomainEventStateNew argument
This commit is contained in:
parent
42a3687f29
commit
1ded8942c7
@ -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)
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
|
|
||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user