提交 4d7297f8 编写于 作者: C Cole Robinson

test: Use virDomainEventState helpers

v3:
    Adjust for new virDomainEventStateNew argument
上级 1ded8942
...@@ -90,12 +90,7 @@ struct _testConn { ...@@ -90,12 +90,7 @@ struct _testConn {
int numCells; int numCells;
testCell cells[MAX_CELLS]; testCell cells[MAX_CELLS];
virDomainEventStatePtr domainEventState;
/* An array of callbacks */
virDomainEventCallbackListPtr domainEventCallbacks;
virDomainEventQueuePtr domainEventQueue;
int domainEventTimer;
int domainEventDispatching;
}; };
typedef struct _testConn testConn; typedef struct _testConn testConn;
typedef struct _testConn *testConnPtr; typedef struct _testConn *testConnPtr;
...@@ -1104,6 +1099,7 @@ static virDrvOpenStatus testOpen(virConnectPtr conn, ...@@ -1104,6 +1099,7 @@ static virDrvOpenStatus testOpen(virConnectPtr conn,
int flags ATTRIBUTE_UNUSED) int flags ATTRIBUTE_UNUSED)
{ {
int ret; int ret;
testConnPtr privconn;
if (!conn->uri) if (!conn->uri)
return VIR_DRV_OPEN_DECLINED; return VIR_DRV_OPEN_DECLINED;
...@@ -1130,26 +1126,25 @@ static virDrvOpenStatus testOpen(virConnectPtr conn, ...@@ -1130,26 +1126,25 @@ static virDrvOpenStatus testOpen(virConnectPtr conn,
ret = testOpenFromFile(conn, ret = testOpenFromFile(conn,
conn->uri->path); conn->uri->path);
if (ret == VIR_DRV_OPEN_SUCCESS) { if (ret != VIR_DRV_OPEN_SUCCESS)
testConnPtr privconn = conn->privateData; return ret;
testDriverLock(privconn);
/* Init callback list */ privconn = conn->privateData;
if (VIR_ALLOC(privconn->domainEventCallbacks) < 0 || testDriverLock(privconn);
!(privconn->domainEventQueue = virDomainEventQueueNew())) {
virReportOOMError();
testDriverUnlock(privconn);
testClose(conn);
return VIR_DRV_OPEN_ERROR;
}
if ((privconn->domainEventTimer = privconn->domainEventState = virDomainEventStateNew(testDomainEventFlush,
virEventAddTimeout(-1, testDomainEventFlush, privconn, NULL)) < 0) privconn,
VIR_DEBUG("virEventAddTimeout failed: No addTimeoutImpl defined. " NULL,
"continuing without events."); false);
if (!privconn->domainEventState) {
testDriverUnlock(privconn); testDriverUnlock(privconn);
testClose(conn);
return VIR_DRV_OPEN_ERROR;
} }
return (ret); testDriverUnlock(privconn);
return VIR_DRV_OPEN_SUCCESS;
} }
static int testClose(virConnectPtr conn) static int testClose(virConnectPtr conn)
...@@ -1162,12 +1157,7 @@ static int testClose(virConnectPtr conn) ...@@ -1162,12 +1157,7 @@ static int testClose(virConnectPtr conn)
virNetworkObjListFree(&privconn->networks); virNetworkObjListFree(&privconn->networks);
virInterfaceObjListFree(&privconn->ifaces); virInterfaceObjListFree(&privconn->ifaces);
virStoragePoolObjListFree(&privconn->pools); virStoragePoolObjListFree(&privconn->pools);
virDomainEventStateFree(privconn->domainEventState);
virDomainEventCallbackListFree(privconn->domainEventCallbacks);
virDomainEventQueueFree(privconn->domainEventQueue);
if (privconn->domainEventTimer != -1)
virEventRemoveTimeout(privconn->domainEventTimer);
testDriverUnlock(privconn); testDriverUnlock(privconn);
virMutexDestroy(&privconn->lock); virMutexDestroy(&privconn->lock);
...@@ -5157,7 +5147,8 @@ testDomainEventRegister(virConnectPtr conn, ...@@ -5157,7 +5147,8 @@ testDomainEventRegister(virConnectPtr conn,
int ret; int ret;
testDriverLock(driver); testDriverLock(driver);
ret = virDomainEventCallbackListAdd(conn, driver->domainEventCallbacks, ret = virDomainEventCallbackListAdd(conn,
driver->domainEventState->callbacks,
callback, opaque, freecb); callback, opaque, freecb);
testDriverUnlock(driver); testDriverUnlock(driver);
...@@ -5173,12 +5164,9 @@ testDomainEventDeregister(virConnectPtr conn, ...@@ -5173,12 +5164,9 @@ testDomainEventDeregister(virConnectPtr conn,
int ret; int ret;
testDriverLock(driver); testDriverLock(driver);
if (driver->domainEventDispatching) ret = virDomainEventStateDeregister(conn,
ret = virDomainEventCallbackListMarkDelete(conn, driver->domainEventCallbacks, driver->domainEventState,
callback); callback);
else
ret = virDomainEventCallbackListRemove(conn, driver->domainEventCallbacks,
callback);
testDriverUnlock(driver); testDriverUnlock(driver);
return ret; return ret;
...@@ -5197,7 +5185,8 @@ testDomainEventRegisterAny(virConnectPtr conn, ...@@ -5197,7 +5185,8 @@ testDomainEventRegisterAny(virConnectPtr conn,
int ret; int ret;
testDriverLock(driver); testDriverLock(driver);
ret = virDomainEventCallbackListAddID(conn, driver->domainEventCallbacks, ret = virDomainEventCallbackListAddID(conn,
driver->domainEventState->callbacks,
dom, eventID, dom, eventID,
callback, opaque, freecb); callback, opaque, freecb);
testDriverUnlock(driver); testDriverUnlock(driver);
...@@ -5213,12 +5202,9 @@ testDomainEventDeregisterAny(virConnectPtr conn, ...@@ -5213,12 +5202,9 @@ testDomainEventDeregisterAny(virConnectPtr conn,
int ret; int ret;
testDriverLock(driver); testDriverLock(driver);
if (driver->domainEventDispatching) ret = virDomainEventStateDeregisterAny(conn,
ret = virDomainEventCallbackListMarkDeleteID(conn, driver->domainEventCallbacks, driver->domainEventState,
callbackID); callbackID);
else
ret = virDomainEventCallbackListRemoveID(conn, driver->domainEventCallbacks,
callbackID);
testDriverUnlock(driver); testDriverUnlock(driver);
return ret; return ret;
...@@ -5242,28 +5228,11 @@ static void testDomainEventDispatchFunc(virConnectPtr conn, ...@@ -5242,28 +5228,11 @@ static void testDomainEventDispatchFunc(virConnectPtr conn,
static void testDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque) static void testDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque)
{ {
testConnPtr driver = opaque; testConnPtr driver = opaque;
virDomainEventQueue tempQueue;
testDriverLock(driver); testDriverLock(driver);
virDomainEventStateFlush(driver->domainEventState,
driver->domainEventDispatching = 1; testDomainEventDispatchFunc,
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,
testDomainEventDispatchFunc,
driver);
/* Purge any deleted callbacks */
virDomainEventCallbackListPurgeMarked(driver->domainEventCallbacks);
driver->domainEventDispatching = 0;
testDriverUnlock(driver); testDriverUnlock(driver);
} }
...@@ -5272,17 +5241,7 @@ static void testDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque) ...@@ -5272,17 +5241,7 @@ static void testDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque)
static void testDomainEventQueue(testConnPtr driver, static void testDomainEventQueue(testConnPtr driver,
virDomainEventPtr event) virDomainEventPtr event)
{ {
if (driver->domainEventTimer < 0) { virDomainEventStateQueue(driver->domainEventState, event);
virDomainEventFree(event);
return;
}
if (virDomainEventQueuePush(driver->domainEventQueue,
event) < 0)
virDomainEventFree(event);
if (driver->domainEventQueue->count == 1)
virEventUpdateTimeout(driver->domainEventTimer, 0);
} }
static virDrvOpenStatus testSecretOpen(virConnectPtr conn, static virDrvOpenStatus testSecretOpen(virConnectPtr conn,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册