summaryrefslogtreecommitdiffstats
path: root/sys/contrib/pf
diff options
context:
space:
mode:
authormlaier <mlaier@FreeBSD.org>2004-07-23 03:37:05 +0000
committermlaier <mlaier@FreeBSD.org>2004-07-23 03:37:05 +0000
commit06a62be24a59008771b864bca2a1a9100e1516e0 (patch)
treee0dbf0cf1009072c8f4e5496d339374a39f47809 /sys/contrib/pf
parentfcf16798bff2bb8f1bc09fe1e974f7bc0cd9a5c5 (diff)
downloadFreeBSD-src-06a62be24a59008771b864bca2a1a9100e1516e0.zip
FreeBSD-src-06a62be24a59008771b864bca2a1a9100e1516e0.tar.gz
Fix the following LOR on pf module unload:
1st ifnet (ifnet) @/usr/src/sys/contrib/pf/net/pf_if.c:191 2nd pf task mtx (pf task mtx) @/usr/src/sys/contrib/pf/net/pf_if.c:197 Reported by: Pyun YongHyeon (a long time ago)
Diffstat (limited to 'sys/contrib/pf')
-rw-r--r--sys/contrib/pf/net/pf_if.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/contrib/pf/net/pf_if.c b/sys/contrib/pf/net/pf_if.c
index 079b025..7fe8a7b 100644
--- a/sys/contrib/pf/net/pf_if.c
+++ b/sys/contrib/pf/net/pf_if.c
@@ -182,11 +182,12 @@ pfi_cleanup(void)
struct ifnet *ifp;
PF_ASSERT(MA_OWNED);
- PF_UNLOCK();
+ PF_UNLOCK();
EVENTHANDLER_DEREGISTER(ifnet_arrival_event, pfi_attach_cookie);
EVENTHANDLER_DEREGISTER(ifnet_departure_event, pfi_detach_cookie);
EVENTHANDLER_DEREGISTER(if_clone_event, pfi_clone_cookie);
+ PF_LOCK();
IFNET_RLOCK();
/* release PFI_IFLAG_INSTANCE */
@@ -194,14 +195,13 @@ pfi_cleanup(void)
strlcpy(key.pfik_name, ifp->if_xname, sizeof(key.pfik_name));
p = RB_FIND(pfi_ifhead, &pfi_ifs, &key);
if (p != NULL) {
- PF_LOCK();
+ IFNET_RUNLOCK();
pfi_detach_ifnet(ifp);
- PF_UNLOCK();
+ IFNET_RLOCK();
}
}
IFNET_RUNLOCK();
- PF_LOCK();
/* XXX clear all other interface group */
while ((p = RB_MIN(pfi_ifhead, &pfi_ifs))) {
RB_REMOVE(pfi_ifhead, &pfi_ifs, p);
OpenPOWER on IntegriCloud