]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
nwfilter: grab driver lock earlier during init (bz96649)
authorStefan Berger <stefanb@linux.vnet.ibm.com>
Tue, 4 Jun 2013 18:50:20 +0000 (14:50 -0400)
committerCole Robinson <crobinso@redhat.com>
Wed, 12 Jun 2013 19:22:43 +0000 (15:22 -0400)
This patch is in relation to Bug 966449:

https://bugzilla.redhat.com/show_bug.cgi?id=966449

This is a patch addressing the coredump.

Thread 1 must be calling  nwfilterDriverRemoveDBusMatches(). It does so with
nwfilterDriverLock held. In the patch below I am now moving the
nwfilterDriverLock(driverState) further up so that the initialization, which
seems to either take a long time or is entirely stuck, occurs with the lock
held and the shutdown cannot occur at the same time.

Remove the lock in virNWFilterDriverIsWatchingFirewallD to avoid
double-locking.

(cherry picked from commit 0ec376c20a42b9eb365c1f9a5596366023c20c35)

src/nwfilter/nwfilter_driver.c

index 17a9e57117d138c47d9670695ec324f985d19c4d..27f2c9469eaad3a5a1aea2373435c70e937a5e90 100644 (file)
@@ -188,6 +188,8 @@ nwfilterDriverStartup(int privileged)
     if (!privileged)
         return 0;
 
+    nwfilterDriverLock(driverState);
+
     if (virNWFilterIPAddrMapInit() < 0)
         goto err_free_driverstate;
     if (virNWFilterLearnInit() < 0)
@@ -200,8 +202,6 @@ nwfilterDriverStartup(int privileged)
     if (virNWFilterConfLayerInit(virNWFilterDomainFWUpdateCB) < 0)
         goto err_techdrivers_shutdown;
 
-    nwfilterDriverLock(driverState);
-
     /*
      * startup the DBus late so we don't get a reload signal while
      * initializing
@@ -334,16 +334,10 @@ nwfilterDriverActive(void) {
 bool
 virNWFilterDriverIsWatchingFirewallD(void)
 {
-    bool ret;
-
     if (!driverState)
         return false;
 
-    nwfilterDriverLock(driverState);
-    ret = driverState->watchingFirewallD;
-    nwfilterDriverUnlock(driverState);
-
-    return ret;
+    return driverState->watchingFirewallD;
 }
 
 /**