On Wed, Jun 24, 2015 at 04:11:45PM +0200, Peter Krempa wrote: > --- > src/test/test_driver.c | 46 ++++++++++++++++++++++++++++------------------ > 1 file changed, 28 insertions(+), 18 deletions(-) > > diff --git a/src/test/test_driver.c b/src/test/test_driver.c > index 8d2bb5b..ff383c6 100644 > --- a/src/test/test_driver.c > +++ b/src/test/test_driver.c > @@ -117,7 +117,7 @@ struct _testDriver { > typedef struct _testDriver testDriver; > typedef testDriver *testDriverPtr; > > -static testDriver defaultConn; > +static testDriverPtr defaultConn; The variable could be also renamed to defaultDrv. > static int defaultConnections; > static virMutex defaultLock = VIR_MUTEX_INITIALIZER; > > @@ -691,7 +691,7 @@ static int > testOpenDefault(virConnectPtr conn) > { > int u; > - testDriverPtr privconn = &defaultConn; > + testDriverPtr privconn = NULL; Same here, this could be privdrv. > virDomainDefPtr domdef = NULL; > virDomainObjPtr domobj = NULL; > virNetworkDefPtr netdef = NULL; > @@ -705,17 +705,18 @@ testOpenDefault(virConnectPtr conn) > > virMutexLock(&defaultLock); > if (defaultConnections++) { > - conn->privateData = &defaultConn; > + conn->privateData = defaultConn; > virMutexUnlock(&defaultLock); > return VIR_DRV_OPEN_SUCCESS; > } > > + if (VIR_ALLOC(privconn) < 0) > + goto error; > + > if (virMutexInit(&privconn->lock) < 0) { > virReportError(VIR_ERR_INTERNAL_ERROR, > "%s", _("cannot initialize mutex")); > - defaultConnections--; > - virMutexUnlock(&defaultLock); > - return VIR_DRV_OPEN_ERROR; > + goto error; > } > > conn->privateData = privconn; > @@ -822,19 +823,23 @@ testOpenDefault(virConnectPtr conn) > } > virNodeDeviceObjUnlock(nodeobj); > > + defaultConn = privconn; > + > virMutexUnlock(&defaultLock); > > return VIR_DRV_OPEN_SUCCESS; > > error: > - virObjectUnref(privconn->domains); > - virObjectUnref(privconn->networks); > - virInterfaceObjListFree(&privconn->ifaces); > - virStoragePoolObjListFree(&privconn->pools); > - virNodeDeviceObjListFree(&privconn->devs); > - virObjectUnref(privconn->caps); > - virObjectEventStateFree(privconn->eventState); > - virMutexDestroy(&privconn->lock); > + if (privconn) { > + virObjectUnref(privconn->domains); > + virObjectUnref(privconn->networks); > + virInterfaceObjListFree(&privconn->ifaces); > + virStoragePoolObjListFree(&privconn->pools); > + virNodeDeviceObjListFree(&privconn->devs); > + virObjectUnref(privconn->caps); > + virObjectEventStateFree(privconn->eventState); > + virMutexDestroy(&privconn->lock); > + } > conn->privateData = NULL; > virDomainDefFree(domdef); > defaultConnections--; > @@ -1573,8 +1578,10 @@ static virDrvOpenStatus testConnectOpen(virConnectPtr conn, > static int testConnectClose(virConnectPtr conn) > { > testDriverPtr privconn = conn->privateData; > + bool dflt = false; > > - if (privconn == &defaultConn) { > + if (privconn == defaultConn) { > + dflt = true; > virMutexLock(&defaultLock); > if (--defaultConnections) { > virMutexUnlock(&defaultLock); > @@ -1596,10 +1603,13 @@ static int testConnectClose(virConnectPtr conn) > testDriverUnlock(privconn); > virMutexDestroy(&privconn->lock); > > - if (privconn == &defaultConn) > + VIR_FREE(privconn); > + > + if (dflt) { > + defaultConn = NULL; > virMutexUnlock(&defaultLock); > - else > - VIR_FREE(privconn); > + } > + > conn->privateData = NULL; > return 0; > } > -- > 2.4.1 > > -- > libvir-list mailing list > libvir-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list