From 41fb11e6b23ba320f7fff442b2b6c3b01c339ad0 Mon Sep 17 00:00:00 2001 From: Nickolai Zeldovich Date: Tue, 29 Jan 2002 17:36:20 +0000 Subject: [PATCH] Block all signals while sleeping; this prevents 100% cpu usage when a process waiting for an afs operation to complete receives a signal. --- src/afs/LINUX/osi_sleep.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/afs/LINUX/osi_sleep.c b/src/afs/LINUX/osi_sleep.c index 1ddad85..b5b5e96 100644 --- a/src/afs/LINUX/osi_sleep.c +++ b/src/afs/LINUX/osi_sleep.c @@ -223,9 +223,22 @@ void afs_osi_Sleep(char *event) seq = evp->seq; while (seq == evp->seq) { + sigset_t saved_set; + AFS_ASSERT_GLOCK(); AFS_GUNLOCK(); + spin_lock_irq(¤t->sigmask_lock); + saved_set = current->blocked; + sigfillset(¤t->blocked); + recalc_sigpending(current); + spin_unlock_irq(¤t->sigmask_lock); + interruptible_sleep_on(&evp->cond); + + spin_lock_irq(¤t->sigmask_lock); + current->blocked = saved_set; + recalc_sigpending(current); + spin_unlock_irq(¤t->sigmask_lock); AFS_GLOCK(); } relevent(evp); -- 1.9.4