svn commit: r237369 - projects/pf/head/sys/contrib/pf/net
Gleb Smirnoff
glebius at FreeBSD.org
Thu Jun 21 09:47:06 UTC 2012
Author: glebius
Date: Thu Jun 21 09:47:05 2012
New Revision: 237369
URL: http://svn.freebsd.org/changeset/base/237369
Log:
Use the pf_rules_lock to correctly finish the expiry thread.
Modified:
projects/pf/head/sys/contrib/pf/net/pf.c
projects/pf/head/sys/contrib/pf/net/pf_ioctl.c
Modified: projects/pf/head/sys/contrib/pf/net/pf.c
==============================================================================
--- projects/pf/head/sys/contrib/pf/net/pf.c Thu Jun 21 09:46:22 2012 (r237368)
+++ projects/pf/head/sys/contrib/pf/net/pf.c Thu Jun 21 09:47:05 2012 (r237369)
@@ -1317,14 +1317,16 @@ pf_purge_thread(void *v)
CURVNET_SET((struct vnet *)v);
+ PF_RULES_RLOCK();
for (;;) {
- tsleep(pf_purge_thread, PWAIT, "pftm", hz / 10);
+ rw_sleep(pf_purge_thread, &pf_rules_lock, 0, "pftm", hz / 10);
if (V_pf_end_threads) {
pf_purge_expired_states(V_pf_hashmask + 1);
pf_purge_expired_fragments();
pf_purge_expired_src_nodes();
V_pf_end_threads++;
+ PF_RULES_RUNLOCK();
wakeup(pf_purge_thread);
kproc_exit(0);
}
Modified: projects/pf/head/sys/contrib/pf/net/pf_ioctl.c
==============================================================================
--- projects/pf/head/sys/contrib/pf/net/pf_ioctl.c Thu Jun 21 09:46:22 2012 (r237368)
+++ projects/pf/head/sys/contrib/pf/net/pf_ioctl.c Thu Jun 21 09:47:05 2012 (r237369)
@@ -3756,7 +3756,7 @@ pf_unload(void)
V_pf_end_threads = 1;
while (V_pf_end_threads < 2) {
wakeup_one(pf_purge_thread);
- tsleep(pf_purge_thread, PWAIT, "pftmo", hz);
+ rw_sleep(pf_purge_thread, &pf_rules_lock, 0, "pftmo", 0);
}
pf_normalize_cleanup();
pfi_cleanup();
More information about the svn-src-projects
mailing list