]> 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>
Tue, 11 Jun 2013 22:40:43 +0000 (18:40 -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 789280785ba141277471604c1f9f06592d574229..8f73d3b57010f87e729a776fdf69e82f91bac3ec 100644 (file)
@@ -190,6 +190,8 @@ nwfilterStateInitialize(bool privileged,
     if (!privileged)
         return 0;
 
+    nwfilterDriverLock(driverState);
+
     if (virNWFilterIPAddrMapInit() < 0)
         goto err_free_driverstate;
     if (virNWFilterLearnInit() < 0)
@@ -202,8 +204,6 @@ nwfilterStateInitialize(bool 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
@@ -315,16 +315,10 @@ nwfilterStateReload(void) {
 bool
 virNWFilterDriverIsWatchingFirewallD(void)
 {
-    bool ret;
-
     if (!driverState)
         return false;
 
-    nwfilterDriverLock(driverState);
-    ret = driverState->watchingFirewallD;
-    nwfilterDriverUnlock(driverState);
-
-    return ret;
+    return driverState->watchingFirewallD;
 }
 
 /**