diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-12-26 09:21:05 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-12-26 09:21:05 +0100 |
commit | c656d9ca48d3ef1a11449e892ce488ee0bb5a335 (patch) | |
tree | 0c5598659b3e7f12864d203967d42ac3feb1142c /net/unix/garbage.c | |
parent | 71ab6b245fda6e7597a667a67cce0d26c3c7a14b (diff) | |
parent | a73ad3331fdbf4191cf99b83ea9ac7082b6757ba (diff) |
Merge branch 'x86/fpu' into x86/cleanups
Diffstat (limited to 'net/unix/garbage.c')
-rw-r--r-- | net/unix/garbage.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/net/unix/garbage.c b/net/unix/garbage.c index 6d4a9a8de5ef1..abb3ab34cb1ec 100644 --- a/net/unix/garbage.c +++ b/net/unix/garbage.c @@ -80,6 +80,7 @@ #include <linux/file.h> #include <linux/proc_fs.h> #include <linux/mutex.h> +#include <linux/wait.h> #include <net/sock.h> #include <net/af_unix.h> @@ -91,6 +92,7 @@ static LIST_HEAD(gc_inflight_list); static LIST_HEAD(gc_candidates); static DEFINE_SPINLOCK(unix_gc_lock); +static DECLARE_WAIT_QUEUE_HEAD(unix_gc_wait); unsigned int unix_tot_inflight; @@ -266,12 +268,16 @@ static void inc_inflight_move_tail(struct unix_sock *u) list_move_tail(&u->link, &gc_candidates); } -/* The external entry point: unix_gc() */ +static bool gc_in_progress = false; -void unix_gc(void) +void wait_for_unix_gc(void) { - static bool gc_in_progress = false; + wait_event(unix_gc_wait, gc_in_progress == false); +} +/* The external entry point: unix_gc() */ +void unix_gc(void) +{ struct unix_sock *u; struct unix_sock *next; struct sk_buff_head hitlist; @@ -376,6 +382,7 @@ void unix_gc(void) /* All candidates should have been detached by now. */ BUG_ON(!list_empty(&gc_candidates)); gc_in_progress = false; + wake_up(&unix_gc_wait); out: spin_unlock(&unix_gc_lock); |