summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandre <andre@FreeBSD.org>2004-08-19 23:31:40 +0000
committerandre <andre@FreeBSD.org>2004-08-19 23:31:40 +0000
commit5947fa055f90e0672e977ff67865c0e1ee8150b7 (patch)
treed7edcaaf516b864eaa6b4c28e72a9d53d5746373
parent754abea798fde6cb924de5a9adddad3c023ccbbd (diff)
downloadFreeBSD-src-5947fa055f90e0672e977ff67865c0e1ee8150b7.zip
FreeBSD-src-5947fa055f90e0672e977ff67865c0e1ee8150b7.tar.gz
When unloading ipfw module use callout_drain() to make absolutely sure that
all callouts are stopped and finished. Move it before IPFW_LOCK() to avoid deadlocking when draining callouts.
-rw-r--r--sys/netinet/ip_fw2.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/netinet/ip_fw2.c b/sys/netinet/ip_fw2.c
index 2737611..5b9b965 100644
--- a/sys/netinet/ip_fw2.c
+++ b/sys/netinet/ip_fw2.c
@@ -3421,8 +3421,8 @@ ipfw_destroy(void)
ip_fw_chk_ptr = NULL;
ip_fw_ctl_ptr = NULL;
+ callout_drain(&ipfw_timeout);
IPFW_LOCK(&layer3_chain);
- callout_stop(&ipfw_timeout);
layer3_chain.reap = NULL;
free_chain(&layer3_chain, 1 /* kill default rule */);
reap = layer3_chain.reap, layer3_chain.reap = NULL;
OpenPOWER on IntegriCloud