From c35b5269af31fe90d9e0379df2bee73bb8cde457 Mon Sep 17 00:00:00 2001 From: Matthias Bolte Date: Sat, 17 Apr 2010 18:20:15 +0200 Subject: [PATCH] nwfilter: Free nwfilter hash of virConnectPtr And close the driver on connection close. --- src/datatypes.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/datatypes.c b/src/datatypes.c index ebcd5384bd..25962a638b 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -128,6 +128,20 @@ virSecretFreeName(void *secret_, const char *name ATTRIBUTE_UNUSED) virUnrefSecret(secret); } +/** + * virNWFilterPoolFreeName: + * @pool: a nwfilter pool object + * + * Destroy the nwfilter pool object, this is just used by the nwfilter pool hash callback. + * + * Returns 0 in case of success and -1 in case of failure. + */ +static int +virNWFilterPoolFreeName(virNWFilterPtr pool, const char *name ATTRIBUTE_UNUSED) +{ + return (virUnrefNWFilter(pool)); +} + /** * virDomainSnapshotFreeName: * @snapshot: a domain snapshotobject @@ -212,6 +226,8 @@ failed: virHashFree(ret->nodeDevices, (virHashDeallocator) virNodeDeviceFree); if (ret->secrets != NULL) virHashFree(ret->secrets, virSecretFreeName); + if (ret->nwfilterPools != NULL) + virHashFree(ret->nwfilterPools, (virHashDeallocator) virNWFilterPoolFreeName); virMutexDestroy(&ret->lock); VIR_FREE(ret); @@ -245,6 +261,8 @@ virReleaseConnect(virConnectPtr conn) { virHashFree(conn->nodeDevices, (virHashDeallocator) virNodeDeviceFree); if (conn->secrets != NULL) virHashFree(conn->secrets, virSecretFreeName); + if (conn->nwfilterPools != NULL) + virHashFree(conn->nwfilterPools, (virHashDeallocator) virNWFilterPoolFreeName); virResetError(&conn->err); @@ -292,6 +310,8 @@ virUnrefConnect(virConnectPtr conn) { conn->deviceMonitor->close (conn); if (conn->secretDriver) conn->secretDriver->close (conn); + if (conn->nwfilterDriver) + conn->nwfilterDriver->close (conn); if (conn->driver) conn->driver->close (conn);