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