mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-10-05 22:05:47 +00:00
nwfilter_driver: Use automatic mutex management
Signed-off-by: Tim Wiederhake <twiederh@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
183804c043
commit
d115fe8d11
@ -57,15 +57,6 @@ static int nwfilterStateReload(void);
|
|||||||
|
|
||||||
static virMutex driverMutex = VIR_MUTEX_INITIALIZER;
|
static virMutex driverMutex = VIR_MUTEX_INITIALIZER;
|
||||||
|
|
||||||
static void nwfilterDriverLock(void)
|
|
||||||
{
|
|
||||||
virMutexLock(&driverMutex);
|
|
||||||
}
|
|
||||||
static void nwfilterDriverUnlock(void)
|
|
||||||
{
|
|
||||||
virMutexUnlock(&driverMutex);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef WITH_FIREWALLD
|
#ifdef WITH_FIREWALLD
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -204,6 +195,7 @@ nwfilterStateInitialize(bool privileged,
|
|||||||
virStateInhibitCallback callback G_GNUC_UNUSED,
|
virStateInhibitCallback callback G_GNUC_UNUSED,
|
||||||
void *opaque G_GNUC_UNUSED)
|
void *opaque G_GNUC_UNUSED)
|
||||||
{
|
{
|
||||||
|
VIR_LOCK_GUARD lock = virLockGuardLock(&driverMutex);
|
||||||
GDBusConnection *sysbus = NULL;
|
GDBusConnection *sysbus = NULL;
|
||||||
|
|
||||||
if (root != NULL) {
|
if (root != NULL) {
|
||||||
@ -230,8 +222,6 @@ nwfilterStateInitialize(bool privileged,
|
|||||||
if (!privileged)
|
if (!privileged)
|
||||||
return VIR_DRV_STATE_INIT_SKIPPED;
|
return VIR_DRV_STATE_INIT_SKIPPED;
|
||||||
|
|
||||||
nwfilterDriverLock();
|
|
||||||
|
|
||||||
driver->stateDir = g_strdup(RUNSTATEDIR "/libvirt/nwfilter");
|
driver->stateDir = g_strdup(RUNSTATEDIR "/libvirt/nwfilter");
|
||||||
|
|
||||||
if (g_mkdir_with_parents(driver->stateDir, S_IRWXU) < 0) {
|
if (g_mkdir_with_parents(driver->stateDir, S_IRWXU) < 0) {
|
||||||
@ -290,13 +280,10 @@ nwfilterStateInitialize(bool privileged,
|
|||||||
if (virNWFilterBuildAll(driver, false) < 0)
|
if (virNWFilterBuildAll(driver, false) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
nwfilterDriverUnlock();
|
|
||||||
|
|
||||||
return VIR_DRV_STATE_INIT_COMPLETE;
|
return VIR_DRV_STATE_INIT_COMPLETE;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
nwfilterDriverUnlock();
|
nwfilterStateCleanupLocked();
|
||||||
nwfilterStateCleanup();
|
|
||||||
|
|
||||||
return VIR_DRV_STATE_INIT_ERROR;
|
return VIR_DRV_STATE_INIT_ERROR;
|
||||||
|
|
||||||
@ -335,16 +322,15 @@ nwfilterStateReload(void)
|
|||||||
/* shut down all threads -- they will be restarted if necessary */
|
/* shut down all threads -- they will be restarted if necessary */
|
||||||
virNWFilterLearnThreadsTerminate(true);
|
virNWFilterLearnThreadsTerminate(true);
|
||||||
|
|
||||||
nwfilterDriverLock();
|
VIR_WITH_MUTEX_LOCK_GUARD(&driverMutex) {
|
||||||
virNWFilterWriteLockFilterUpdates();
|
virNWFilterWriteLockFilterUpdates();
|
||||||
|
|
||||||
virNWFilterObjListLoadAllConfigs(driver->nwfilters, driver->configDir);
|
virNWFilterObjListLoadAllConfigs(driver->nwfilters, driver->configDir);
|
||||||
|
|
||||||
virNWFilterUnlockFilterUpdates();
|
virNWFilterUnlockFilterUpdates();
|
||||||
|
|
||||||
virNWFilterBuildAll(driver, false);
|
virNWFilterBuildAll(driver, false);
|
||||||
|
}
|
||||||
nwfilterDriverUnlock();
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -422,13 +408,13 @@ static virNWFilterPtr
|
|||||||
nwfilterLookupByUUID(virConnectPtr conn,
|
nwfilterLookupByUUID(virConnectPtr conn,
|
||||||
const unsigned char *uuid)
|
const unsigned char *uuid)
|
||||||
{
|
{
|
||||||
virNWFilterObj *obj;
|
virNWFilterObj *obj = NULL;
|
||||||
virNWFilterDef *def;
|
virNWFilterDef *def;
|
||||||
virNWFilterPtr nwfilter = NULL;
|
virNWFilterPtr nwfilter = NULL;
|
||||||
|
|
||||||
nwfilterDriverLock();
|
VIR_WITH_MUTEX_LOCK_GUARD(&driverMutex) {
|
||||||
obj = nwfilterObjFromNWFilter(uuid);
|
obj = nwfilterObjFromNWFilter(uuid);
|
||||||
nwfilterDriverUnlock();
|
}
|
||||||
|
|
||||||
if (!obj)
|
if (!obj)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -449,13 +435,13 @@ static virNWFilterPtr
|
|||||||
nwfilterLookupByName(virConnectPtr conn,
|
nwfilterLookupByName(virConnectPtr conn,
|
||||||
const char *name)
|
const char *name)
|
||||||
{
|
{
|
||||||
virNWFilterObj *obj;
|
virNWFilterObj *obj = NULL;
|
||||||
virNWFilterDef *def;
|
virNWFilterDef *def;
|
||||||
virNWFilterPtr nwfilter = NULL;
|
virNWFilterPtr nwfilter = NULL;
|
||||||
|
|
||||||
nwfilterDriverLock();
|
VIR_WITH_MUTEX_LOCK_GUARD(&driverMutex) {
|
||||||
obj = virNWFilterObjListFindByName(driver->nwfilters, name);
|
obj = virNWFilterObjListFindByName(driver->nwfilters, name);
|
||||||
nwfilterDriverUnlock();
|
}
|
||||||
|
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
virReportError(VIR_ERR_NO_NWFILTER,
|
virReportError(VIR_ERR_NO_NWFILTER,
|
||||||
@ -478,14 +464,15 @@ nwfilterLookupByName(virConnectPtr conn,
|
|||||||
static int
|
static int
|
||||||
nwfilterConnectNumOfNWFilters(virConnectPtr conn)
|
nwfilterConnectNumOfNWFilters(virConnectPtr conn)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = -1;
|
||||||
if (virConnectNumOfNWFiltersEnsureACL(conn) < 0)
|
if (virConnectNumOfNWFiltersEnsureACL(conn) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
nwfilterDriverLock();
|
VIR_WITH_MUTEX_LOCK_GUARD(&driverMutex) {
|
||||||
ret = virNWFilterObjListNumOfNWFilters(driver->nwfilters, conn,
|
ret = virNWFilterObjListNumOfNWFilters(driver->nwfilters, conn,
|
||||||
virConnectNumOfNWFiltersCheckACL);
|
virConnectNumOfNWFiltersCheckACL);
|
||||||
nwfilterDriverUnlock();
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -495,16 +482,17 @@ nwfilterConnectListNWFilters(virConnectPtr conn,
|
|||||||
char **const names,
|
char **const names,
|
||||||
int maxnames)
|
int maxnames)
|
||||||
{
|
{
|
||||||
int nnames;
|
int nnames = -1;
|
||||||
|
|
||||||
if (virConnectListNWFiltersEnsureACL(conn) < 0)
|
if (virConnectListNWFiltersEnsureACL(conn) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
nwfilterDriverLock();
|
VIR_WITH_MUTEX_LOCK_GUARD(&driverMutex) {
|
||||||
nnames = virNWFilterObjListGetNames(driver->nwfilters, conn,
|
nnames = virNWFilterObjListGetNames(driver->nwfilters, conn,
|
||||||
virConnectListNWFiltersCheckACL,
|
virConnectListNWFiltersCheckACL,
|
||||||
names, maxnames);
|
names, maxnames);
|
||||||
nwfilterDriverUnlock();
|
}
|
||||||
|
|
||||||
return nnames;
|
return nnames;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -514,17 +502,17 @@ nwfilterConnectListAllNWFilters(virConnectPtr conn,
|
|||||||
virNWFilterPtr **nwfilters,
|
virNWFilterPtr **nwfilters,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = -1;
|
||||||
|
|
||||||
virCheckFlags(0, -1);
|
virCheckFlags(0, -1);
|
||||||
|
|
||||||
if (virConnectListAllNWFiltersEnsureACL(conn) < 0)
|
if (virConnectListAllNWFiltersEnsureACL(conn) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
nwfilterDriverLock();
|
VIR_WITH_MUTEX_LOCK_GUARD(&driverMutex) {
|
||||||
ret = virNWFilterObjListExport(conn, driver->nwfilters, nwfilters,
|
ret = virNWFilterObjListExport(conn, driver->nwfilters, nwfilters,
|
||||||
virConnectListAllNWFiltersCheckACL);
|
virConnectListAllNWFiltersCheckACL);
|
||||||
nwfilterDriverUnlock();
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -535,6 +523,7 @@ nwfilterDefineXMLFlags(virConnectPtr conn,
|
|||||||
const char *xml,
|
const char *xml,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
|
VIR_LOCK_GUARD lock = virLockGuardLock(&driverMutex);
|
||||||
virNWFilterDef *def;
|
virNWFilterDef *def;
|
||||||
virNWFilterObj *obj = NULL;
|
virNWFilterObj *obj = NULL;
|
||||||
virNWFilterDef *objdef;
|
virNWFilterDef *objdef;
|
||||||
@ -549,7 +538,6 @@ nwfilterDefineXMLFlags(virConnectPtr conn,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
nwfilterDriverLock();
|
|
||||||
virNWFilterWriteLockFilterUpdates();
|
virNWFilterWriteLockFilterUpdates();
|
||||||
|
|
||||||
if (!(def = virNWFilterDefParseString(xml, flags)))
|
if (!(def = virNWFilterDefParseString(xml, flags)))
|
||||||
@ -576,7 +564,6 @@ nwfilterDefineXMLFlags(virConnectPtr conn,
|
|||||||
virNWFilterObjUnlock(obj);
|
virNWFilterObjUnlock(obj);
|
||||||
|
|
||||||
virNWFilterUnlockFilterUpdates();
|
virNWFilterUnlockFilterUpdates();
|
||||||
nwfilterDriverUnlock();
|
|
||||||
return nwfilter;
|
return nwfilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -592,11 +579,11 @@ nwfilterDefineXML(virConnectPtr conn,
|
|||||||
static int
|
static int
|
||||||
nwfilterUndefine(virNWFilterPtr nwfilter)
|
nwfilterUndefine(virNWFilterPtr nwfilter)
|
||||||
{
|
{
|
||||||
|
VIR_LOCK_GUARD lock = virLockGuardLock(&driverMutex);
|
||||||
virNWFilterObj *obj;
|
virNWFilterObj *obj;
|
||||||
virNWFilterDef *def;
|
virNWFilterDef *def;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
nwfilterDriverLock();
|
|
||||||
virNWFilterWriteLockFilterUpdates();
|
virNWFilterWriteLockFilterUpdates();
|
||||||
|
|
||||||
if (!(obj = nwfilterObjFromNWFilter(nwfilter->uuid)))
|
if (!(obj = nwfilterObjFromNWFilter(nwfilter->uuid)))
|
||||||
@ -625,7 +612,6 @@ nwfilterUndefine(virNWFilterPtr nwfilter)
|
|||||||
virNWFilterObjUnlock(obj);
|
virNWFilterObjUnlock(obj);
|
||||||
|
|
||||||
virNWFilterUnlockFilterUpdates();
|
virNWFilterUnlockFilterUpdates();
|
||||||
nwfilterDriverUnlock();
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -634,15 +620,15 @@ static char *
|
|||||||
nwfilterGetXMLDesc(virNWFilterPtr nwfilter,
|
nwfilterGetXMLDesc(virNWFilterPtr nwfilter,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virNWFilterObj *obj;
|
virNWFilterObj *obj = NULL;
|
||||||
virNWFilterDef *def;
|
virNWFilterDef *def;
|
||||||
char *ret = NULL;
|
char *ret = NULL;
|
||||||
|
|
||||||
virCheckFlags(0, NULL);
|
virCheckFlags(0, NULL);
|
||||||
|
|
||||||
nwfilterDriverLock();
|
VIR_WITH_MUTEX_LOCK_GUARD(&driverMutex) {
|
||||||
obj = nwfilterObjFromNWFilter(nwfilter->uuid);
|
obj = nwfilterObjFromNWFilter(nwfilter->uuid);
|
||||||
nwfilterDriverUnlock();
|
}
|
||||||
|
|
||||||
if (!obj)
|
if (!obj)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user