the gc is run from a task in the systq, so we dont need a flag to serialise it. it is already serialised.
ok? Index: uipc_usrreq.c =================================================================== RCS file: /cvs/src/sys/kern/uipc_usrreq.c,v retrieving revision 1.95 diff -u -p -r1.95 uipc_usrreq.c --- uipc_usrreq.c 5 Dec 2015 10:11:53 -0000 1.95 +++ uipc_usrreq.c 25 Feb 2016 11:38:16 -0000 @@ -882,7 +882,7 @@ fail: return (error); } -int unp_defer, unp_gcing; +int unp_defer; void unp_gc(void *arg __unused) @@ -893,10 +893,6 @@ unp_gc(void *arg __unused) struct unpcb *unp; int nunref, i; - if (unp_gcing) - return; - unp_gcing = 1; - /* close any fds on the deferred list */ while ((defer = SLIST_FIRST(&unp_deferred)) != NULL) { SLIST_REMOVE_HEAD(&unp_deferred, ud_link); @@ -991,7 +987,6 @@ unp_gc(void *arg __unused) unp_discard); } } - unp_gcing = 0; } void