mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
Change virDomainEventState to virObjectLockable
This way we get reference counting and we can get rid of locking function. Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
parent
8ee8f939fe
commit
1827f2ac5d
1
cfg.mk
1
cfg.mk
@ -127,7 +127,6 @@ useless_free_options = \
|
|||||||
--name=virDomainDiskDefFree \
|
--name=virDomainDiskDefFree \
|
||||||
--name=virDomainEventCallbackListFree \
|
--name=virDomainEventCallbackListFree \
|
||||||
--name=virObjectEventQueueFree \
|
--name=virObjectEventQueueFree \
|
||||||
--name=virObjectEventStateFree \
|
|
||||||
--name=virDomainFSDefFree \
|
--name=virDomainFSDefFree \
|
||||||
--name=virDomainGraphicsDefFree \
|
--name=virDomainGraphicsDefFree \
|
||||||
--name=virDomainHostdevDefFree \
|
--name=virDomainHostdevDefFree \
|
||||||
|
@ -1198,7 +1198,7 @@ bhyveStateCleanup(void)
|
|||||||
virObjectUnref(bhyve_driver->xmlopt);
|
virObjectUnref(bhyve_driver->xmlopt);
|
||||||
virSysinfoDefFree(bhyve_driver->hostsysinfo);
|
virSysinfoDefFree(bhyve_driver->hostsysinfo);
|
||||||
virObjectUnref(bhyve_driver->closeCallbacks);
|
virObjectUnref(bhyve_driver->closeCallbacks);
|
||||||
virObjectEventStateFree(bhyve_driver->domainEventState);
|
virObjectUnref(bhyve_driver->domainEventState);
|
||||||
|
|
||||||
virMutexDestroy(&bhyve_driver->lock);
|
virMutexDestroy(&bhyve_driver->lock);
|
||||||
VIR_FREE(bhyve_driver);
|
VIR_FREE(bhyve_driver);
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include "datatypes.h"
|
#include "datatypes.h"
|
||||||
#include "viralloc.h"
|
#include "viralloc.h"
|
||||||
#include "virerror.h"
|
#include "virerror.h"
|
||||||
|
#include "virobject.h"
|
||||||
#include "virstring.h"
|
#include "virstring.h"
|
||||||
|
|
||||||
#define VIR_FROM_THIS VIR_FROM_NONE
|
#define VIR_FROM_THIS VIR_FROM_NONE
|
||||||
@ -71,6 +72,7 @@ typedef struct _virObjectEventQueue virObjectEventQueue;
|
|||||||
typedef virObjectEventQueue *virObjectEventQueuePtr;
|
typedef virObjectEventQueue *virObjectEventQueuePtr;
|
||||||
|
|
||||||
struct _virObjectEventState {
|
struct _virObjectEventState {
|
||||||
|
virObjectLockable parent;
|
||||||
/* The list of domain event callbacks */
|
/* The list of domain event callbacks */
|
||||||
virObjectEventCallbackListPtr callbacks;
|
virObjectEventCallbackListPtr callbacks;
|
||||||
/* The queue of object events */
|
/* The queue of object events */
|
||||||
@ -79,22 +81,31 @@ struct _virObjectEventState {
|
|||||||
int timer;
|
int timer;
|
||||||
/* Flag if we're in process of dispatching */
|
/* Flag if we're in process of dispatching */
|
||||||
bool isDispatching;
|
bool isDispatching;
|
||||||
virMutex lock;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static virClassPtr virObjectEventClass;
|
static virClassPtr virObjectEventClass;
|
||||||
|
static virClassPtr virObjectEventStateClass;
|
||||||
|
|
||||||
static void virObjectEventDispose(void *obj);
|
static void virObjectEventDispose(void *obj);
|
||||||
|
static void virObjectEventStateDispose(void *obj);
|
||||||
|
|
||||||
static int
|
static int
|
||||||
virObjectEventOnceInit(void)
|
virObjectEventOnceInit(void)
|
||||||
{
|
{
|
||||||
|
if (!(virObjectEventStateClass =
|
||||||
|
virClassNew(virClassForObjectLockable(),
|
||||||
|
"virObjectEventState",
|
||||||
|
sizeof(virObjectEventState),
|
||||||
|
virObjectEventStateDispose)))
|
||||||
|
return -1;
|
||||||
|
|
||||||
if (!(virObjectEventClass =
|
if (!(virObjectEventClass =
|
||||||
virClassNew(virClassForObject(),
|
virClassNew(virClassForObject(),
|
||||||
"virObjectEvent",
|
"virObjectEvent",
|
||||||
sizeof(virObjectEvent),
|
sizeof(virObjectEvent),
|
||||||
virObjectEventDispose)))
|
virObjectEventDispose)))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -504,51 +515,23 @@ virObjectEventQueueNew(void)
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virObjectEventStateLock:
|
* virObjectEventStateDispose:
|
||||||
* @state: the event state object
|
|
||||||
*
|
|
||||||
* Lock event state before calling functions from object_event_private.h.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
virObjectEventStateLock(virObjectEventStatePtr state)
|
|
||||||
{
|
|
||||||
virMutexLock(&state->lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* virObjectEventStateUnlock:
|
|
||||||
* @state: the event state object
|
|
||||||
*
|
|
||||||
* Unlock event state after calling functions from object_event_private.h.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
virObjectEventStateUnlock(virObjectEventStatePtr state)
|
|
||||||
{
|
|
||||||
virMutexUnlock(&state->lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* virObjectEventStateFree:
|
|
||||||
* @list: virObjectEventStatePtr to free
|
* @list: virObjectEventStatePtr to free
|
||||||
*
|
*
|
||||||
* Free a virObjectEventStatePtr and its members, and unregister the timer.
|
* Free a virObjectEventStatePtr and its members, and unregister the timer.
|
||||||
*/
|
*/
|
||||||
void
|
static void
|
||||||
virObjectEventStateFree(virObjectEventStatePtr state)
|
virObjectEventStateDispose(void *obj)
|
||||||
{
|
{
|
||||||
if (!state)
|
virObjectEventStatePtr state = obj;
|
||||||
return;
|
|
||||||
|
VIR_DEBUG("obj=%p", state);
|
||||||
|
|
||||||
virObjectEventCallbackListFree(state->callbacks);
|
virObjectEventCallbackListFree(state->callbacks);
|
||||||
virObjectEventQueueFree(state->queue);
|
virObjectEventQueueFree(state->queue);
|
||||||
|
|
||||||
if (state->timer != -1)
|
if (state->timer != -1)
|
||||||
virEventRemoveTimeout(state->timer);
|
virEventRemoveTimeout(state->timer);
|
||||||
|
|
||||||
virMutexDestroy(&state->lock);
|
|
||||||
VIR_FREE(state);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -583,15 +566,11 @@ virObjectEventStateNew(void)
|
|||||||
{
|
{
|
||||||
virObjectEventStatePtr state = NULL;
|
virObjectEventStatePtr state = NULL;
|
||||||
|
|
||||||
if (VIR_ALLOC(state) < 0)
|
if (virObjectEventInitialize() < 0)
|
||||||
goto error;
|
return NULL;
|
||||||
|
|
||||||
if (virMutexInit(&state->lock) < 0) {
|
if (!(state = virObjectLockableNew(virObjectEventStateClass)))
|
||||||
virReportSystemError(errno, "%s",
|
return NULL;
|
||||||
_("unable to initialize state mutex"));
|
|
||||||
VIR_FREE(state);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (VIR_ALLOC(state->callbacks) < 0)
|
if (VIR_ALLOC(state->callbacks) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
@ -604,7 +583,7 @@ virObjectEventStateNew(void)
|
|||||||
return state;
|
return state;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
virObjectEventStateFree(state);
|
virObjectUnref(state);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -727,9 +706,9 @@ virObjectEventStateDispatchCallbacks(virObjectEventStatePtr state,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Drop the lock whle dispatching, for sake of re-entrancy */
|
/* Drop the lock whle dispatching, for sake of re-entrancy */
|
||||||
virObjectEventStateUnlock(state);
|
virObjectUnlock(state);
|
||||||
event->dispatch(cb->conn, event, cb->cb, cb->opaque);
|
event->dispatch(cb->conn, event, cb->cb, cb->opaque);
|
||||||
virObjectEventStateLock(state);
|
virObjectLock(state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -773,7 +752,7 @@ virObjectEventStateQueueRemote(virObjectEventStatePtr state,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
virObjectEventStateLock(state);
|
virObjectLock(state);
|
||||||
|
|
||||||
event->remoteID = remoteID;
|
event->remoteID = remoteID;
|
||||||
if (virObjectEventQueuePush(state->queue, event) < 0) {
|
if (virObjectEventQueuePush(state->queue, event) < 0) {
|
||||||
@ -783,7 +762,7 @@ virObjectEventStateQueueRemote(virObjectEventStatePtr state,
|
|||||||
|
|
||||||
if (state->queue->count == 1)
|
if (state->queue->count == 1)
|
||||||
virEventUpdateTimeout(state->timer, 0);
|
virEventUpdateTimeout(state->timer, 0);
|
||||||
virObjectEventStateUnlock(state);
|
virObjectUnlock(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -809,7 +788,7 @@ virObjectEventStateFlush(virObjectEventStatePtr state)
|
|||||||
{
|
{
|
||||||
virObjectEventQueue tempQueue;
|
virObjectEventQueue tempQueue;
|
||||||
|
|
||||||
virObjectEventStateLock(state);
|
virObjectLock(state);
|
||||||
state->isDispatching = true;
|
state->isDispatching = true;
|
||||||
|
|
||||||
/* Copy the queue, so we're reentrant safe when dispatchFunc drops the
|
/* Copy the queue, so we're reentrant safe when dispatchFunc drops the
|
||||||
@ -829,7 +808,7 @@ virObjectEventStateFlush(virObjectEventStatePtr state)
|
|||||||
virObjectEventCallbackListPurgeMarked(state->callbacks);
|
virObjectEventCallbackListPurgeMarked(state->callbacks);
|
||||||
|
|
||||||
state->isDispatching = false;
|
state->isDispatching = false;
|
||||||
virObjectEventStateUnlock(state);
|
virObjectUnlock(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -884,7 +863,7 @@ virObjectEventStateRegisterID(virConnectPtr conn,
|
|||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
virObjectEventStateLock(state);
|
virObjectLock(state);
|
||||||
|
|
||||||
if ((state->callbacks->count == 0) &&
|
if ((state->callbacks->count == 0) &&
|
||||||
(state->timer == -1) &&
|
(state->timer == -1) &&
|
||||||
@ -911,7 +890,7 @@ virObjectEventStateRegisterID(virConnectPtr conn,
|
|||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
virObjectEventStateUnlock(state);
|
virObjectUnlock(state);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -934,7 +913,7 @@ virObjectEventStateDeregisterID(virConnectPtr conn,
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
virObjectEventStateLock(state);
|
virObjectLock(state);
|
||||||
if (state->isDispatching)
|
if (state->isDispatching)
|
||||||
ret = virObjectEventCallbackListMarkDeleteID(conn,
|
ret = virObjectEventCallbackListMarkDeleteID(conn,
|
||||||
state->callbacks,
|
state->callbacks,
|
||||||
@ -950,7 +929,7 @@ virObjectEventStateDeregisterID(virConnectPtr conn,
|
|||||||
virObjectEventQueueClear(state->queue);
|
virObjectEventQueueClear(state->queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
virObjectEventStateUnlock(state);
|
virObjectUnlock(state);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -978,11 +957,11 @@ virObjectEventStateCallbackID(virConnectPtr conn,
|
|||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
virObjectEventStateLock(state);
|
virObjectLock(state);
|
||||||
ret = virObjectEventCallbackLookup(conn, state->callbacks, NULL,
|
ret = virObjectEventCallbackLookup(conn, state->callbacks, NULL,
|
||||||
klass, eventID, callback, true,
|
klass, eventID, callback, true,
|
||||||
remoteID);
|
remoteID);
|
||||||
virObjectEventStateUnlock(state);
|
virObjectUnlock(state);
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
virReportError(VIR_ERR_INVALID_ARG,
|
virReportError(VIR_ERR_INVALID_ARG,
|
||||||
@ -1016,7 +995,7 @@ virObjectEventStateEventID(virConnectPtr conn,
|
|||||||
size_t i;
|
size_t i;
|
||||||
virObjectEventCallbackListPtr cbList = state->callbacks;
|
virObjectEventCallbackListPtr cbList = state->callbacks;
|
||||||
|
|
||||||
virObjectEventStateLock(state);
|
virObjectLock(state);
|
||||||
for (i = 0; i < cbList->count; i++) {
|
for (i = 0; i < cbList->count; i++) {
|
||||||
virObjectEventCallbackPtr cb = cbList->callbacks[i];
|
virObjectEventCallbackPtr cb = cbList->callbacks[i];
|
||||||
|
|
||||||
@ -1030,7 +1009,7 @@ virObjectEventStateEventID(virConnectPtr conn,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
virObjectEventStateUnlock(state);
|
virObjectUnlock(state);
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
virReportError(VIR_ERR_INVALID_ARG,
|
virReportError(VIR_ERR_INVALID_ARG,
|
||||||
@ -1060,7 +1039,7 @@ virObjectEventStateSetRemote(virConnectPtr conn,
|
|||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
virObjectEventStateLock(state);
|
virObjectLock(state);
|
||||||
for (i = 0; i < state->callbacks->count; i++) {
|
for (i = 0; i < state->callbacks->count; i++) {
|
||||||
virObjectEventCallbackPtr cb = state->callbacks->callbacks[i];
|
virObjectEventCallbackPtr cb = state->callbacks->callbacks[i];
|
||||||
|
|
||||||
@ -1072,5 +1051,5 @@ virObjectEventStateSetRemote(virConnectPtr conn,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
virObjectEventStateUnlock(state);
|
virObjectUnlock(state);
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,6 @@ typedef struct _virObjectEventState virObjectEventState;
|
|||||||
typedef virObjectEventState *virObjectEventStatePtr;
|
typedef virObjectEventState *virObjectEventStatePtr;
|
||||||
|
|
||||||
|
|
||||||
void virObjectEventStateFree(virObjectEventStatePtr state);
|
|
||||||
virObjectEventStatePtr
|
virObjectEventStatePtr
|
||||||
virObjectEventStateNew(void);
|
virObjectEventStateNew(void);
|
||||||
|
|
||||||
|
@ -819,7 +819,6 @@ virNWFilterVarValueGetSimple;
|
|||||||
# conf/object_event.h
|
# conf/object_event.h
|
||||||
virObjectEventStateDeregisterID;
|
virObjectEventStateDeregisterID;
|
||||||
virObjectEventStateEventID;
|
virObjectEventStateEventID;
|
||||||
virObjectEventStateFree;
|
|
||||||
virObjectEventStateNew;
|
virObjectEventStateNew;
|
||||||
virObjectEventStateQueue;
|
virObjectEventStateQueue;
|
||||||
|
|
||||||
|
@ -479,7 +479,7 @@ libxlStateCleanup(void)
|
|||||||
virObjectUnref(libxl_driver->migrationPorts);
|
virObjectUnref(libxl_driver->migrationPorts);
|
||||||
virLockManagerPluginUnref(libxl_driver->lockManager);
|
virLockManagerPluginUnref(libxl_driver->lockManager);
|
||||||
|
|
||||||
virObjectEventStateFree(libxl_driver->domainEventState);
|
virObjectUnref(libxl_driver->domainEventState);
|
||||||
virSysinfoDefFree(libxl_driver->hostsysinfo);
|
virSysinfoDefFree(libxl_driver->hostsysinfo);
|
||||||
|
|
||||||
virMutexDestroy(&libxl_driver->lock);
|
virMutexDestroy(&libxl_driver->lock);
|
||||||
|
@ -1781,7 +1781,7 @@ static int lxcStateCleanup(void)
|
|||||||
|
|
||||||
virNWFilterUnRegisterCallbackDriver(&lxcCallbackDriver);
|
virNWFilterUnRegisterCallbackDriver(&lxcCallbackDriver);
|
||||||
virObjectUnref(lxc_driver->domains);
|
virObjectUnref(lxc_driver->domains);
|
||||||
virObjectEventStateFree(lxc_driver->domainEventState);
|
virObjectUnref(lxc_driver->domainEventState);
|
||||||
|
|
||||||
virObjectUnref(lxc_driver->closeCallbacks);
|
virObjectUnref(lxc_driver->closeCallbacks);
|
||||||
|
|
||||||
|
@ -777,7 +777,7 @@ networkStateCleanup(void)
|
|||||||
if (!network_driver)
|
if (!network_driver)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
virObjectEventStateFree(network_driver->networkEventState);
|
virObjectUnref(network_driver->networkEventState);
|
||||||
|
|
||||||
/* free inactive networks */
|
/* free inactive networks */
|
||||||
virObjectUnref(network_driver->networks);
|
virObjectUnref(network_driver->networks);
|
||||||
|
@ -1269,7 +1269,7 @@ static int nodeStateCleanup(void)
|
|||||||
|
|
||||||
nodeDeviceLock();
|
nodeDeviceLock();
|
||||||
|
|
||||||
virObjectEventStateFree(driver->nodeDeviceEventState);
|
virObjectUnref(driver->nodeDeviceEventState);
|
||||||
|
|
||||||
priv = driver->privateData;
|
priv = driver->privateData;
|
||||||
|
|
||||||
|
@ -1094,7 +1094,7 @@ qemuStateCleanup(void)
|
|||||||
ebtablesContextFree(qemu_driver->ebtables);
|
ebtablesContextFree(qemu_driver->ebtables);
|
||||||
|
|
||||||
/* Free domain callback list */
|
/* Free domain callback list */
|
||||||
virObjectEventStateFree(qemu_driver->domainEventState);
|
virObjectUnref(qemu_driver->domainEventState);
|
||||||
|
|
||||||
virLockManagerPluginUnref(qemu_driver->lockManager);
|
virLockManagerPluginUnref(qemu_driver->lockManager);
|
||||||
|
|
||||||
|
@ -1343,7 +1343,7 @@ doRemoteClose(virConnectPtr conn, struct private_data *priv)
|
|||||||
/* See comment for remoteType. */
|
/* See comment for remoteType. */
|
||||||
VIR_FREE(priv->type);
|
VIR_FREE(priv->type);
|
||||||
|
|
||||||
virObjectEventStateFree(priv->eventState);
|
virObjectUnref(priv->eventState);
|
||||||
priv->eventState = NULL;
|
priv->eventState = NULL;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -347,7 +347,7 @@ storageStateCleanup(void)
|
|||||||
|
|
||||||
storageDriverLock();
|
storageDriverLock();
|
||||||
|
|
||||||
virObjectEventStateFree(driver->storageEventState);
|
virObjectUnref(driver->storageEventState);
|
||||||
|
|
||||||
/* free inactive pools */
|
/* free inactive pools */
|
||||||
virStoragePoolObjListFree(&driver->pools);
|
virStoragePoolObjListFree(&driver->pools);
|
||||||
|
@ -153,7 +153,7 @@ testDriverFree(testDriverPtr driver)
|
|||||||
virObjectUnref(driver->networks);
|
virObjectUnref(driver->networks);
|
||||||
virInterfaceObjListFree(&driver->ifaces);
|
virInterfaceObjListFree(&driver->ifaces);
|
||||||
virStoragePoolObjListFree(&driver->pools);
|
virStoragePoolObjListFree(&driver->pools);
|
||||||
virObjectEventStateFree(driver->eventState);
|
virObjectUnref(driver->eventState);
|
||||||
virMutexUnlock(&driver->lock);
|
virMutexUnlock(&driver->lock);
|
||||||
virMutexDestroy(&driver->lock);
|
virMutexDestroy(&driver->lock);
|
||||||
|
|
||||||
|
@ -685,7 +685,7 @@ umlStateCleanup(void)
|
|||||||
|
|
||||||
virObjectUnref(uml_driver->domains);
|
virObjectUnref(uml_driver->domains);
|
||||||
|
|
||||||
virObjectEventStateFree(uml_driver->domainEventState);
|
virObjectUnref(uml_driver->domainEventState);
|
||||||
|
|
||||||
VIR_FREE(uml_driver->logDir);
|
VIR_FREE(uml_driver->logDir);
|
||||||
VIR_FREE(uml_driver->configDir);
|
VIR_FREE(uml_driver->configDir);
|
||||||
|
@ -387,7 +387,7 @@ static void vboxUninitialize(vboxGlobalData *data)
|
|||||||
virObjectUnref(data->caps);
|
virObjectUnref(data->caps);
|
||||||
virObjectUnref(data->xmlopt);
|
virObjectUnref(data->xmlopt);
|
||||||
if (gVBoxAPI.domainEventCallbacks)
|
if (gVBoxAPI.domainEventCallbacks)
|
||||||
virObjectEventStateFree(data->domainEvents);
|
virObjectUnref(data->domainEvents);
|
||||||
VIR_FREE(data);
|
VIR_FREE(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ static void vzDriverDispose(void * obj)
|
|||||||
virObjectUnref(driver->domains);
|
virObjectUnref(driver->domains);
|
||||||
virObjectUnref(driver->caps);
|
virObjectUnref(driver->caps);
|
||||||
virObjectUnref(driver->xmlopt);
|
virObjectUnref(driver->xmlopt);
|
||||||
virObjectEventStateFree(driver->domainEventState);
|
virObjectUnref(driver->domainEventState);
|
||||||
virSysinfoDefFree(driver->hostsysinfo);
|
virSysinfoDefFree(driver->hostsysinfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -571,7 +571,7 @@ xenUnifiedConnectClose(virConnectPtr conn)
|
|||||||
|
|
||||||
virObjectUnref(priv->caps);
|
virObjectUnref(priv->caps);
|
||||||
virObjectUnref(priv->xmlopt);
|
virObjectUnref(priv->xmlopt);
|
||||||
virObjectEventStateFree(priv->domainEvents);
|
virObjectUnref(priv->domainEvents);
|
||||||
|
|
||||||
#if WITH_XEN_INOTIFY
|
#if WITH_XEN_INOTIFY
|
||||||
if (priv->opened[XEN_UNIFIED_INOTIFY_OFFSET])
|
if (priv->opened[XEN_UNIFIED_INOTIFY_OFFSET])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user