diff --git a/src/afs/LINUX/osi_sleep.c b/src/afs/LINUX/osi_sleep.c index 1ddad85ba1..b5b5e96ce5 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);