From 0ec376c20a42b9eb365c1f9a5596366023c20c35 Mon Sep 17 00:00:00 2001 From: Stefan Berger Date: Tue, 4 Jun 2013 14:50:20 -0400 Subject: [PATCH] nwfilter: grab driver lock earlier during init (bz96649) 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. --- src/nwfilter/nwfilter_driver.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 19febfc3a5..657330753d 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -191,6 +191,8 @@ nwfilterStateInitialize(bool privileged, if (!privileged) return 0; + nwfilterDriverLock(driverState); + if (virNWFilterIPAddrMapInit() < 0) goto err_free_driverstate; if (virNWFilterLearnInit() < 0) @@ -203,8 +205,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 @@ -316,16 +316,10 @@ nwfilterStateReload(void) { bool virNWFilterDriverIsWatchingFirewallD(void) { - bool ret; - if (!driverState) return false; - nwfilterDriverLock(driverState); - ret = driverState->watchingFirewallD; - nwfilterDriverUnlock(driverState); - - return ret; + return driverState->watchingFirewallD; } /**