From: Sam Hartman Date: Wed, 30 Jan 2002 21:43:58 +0000 (+0000) Subject: This commit was generated by cvs2svn to compensate for changes in r443, X-Git-Tag: debian/1.2.3final2-1~1 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=b995fa7a39dc3957139cf2fe95fe891b9117edb4;p=packages%2Fo%2Fopenafs.git This commit was generated by cvs2svn to compensate for changes in r443, which included commits to RCS files with non-trunk default branches. --- diff --git a/src/rx/LINUX/rx_kmutex.h b/src/rx/LINUX/rx_kmutex.h index fa5e15ae2..8b492132f 100644 --- a/src/rx/LINUX/rx_kmutex.h +++ b/src/rx/LINUX/rx_kmutex.h @@ -106,16 +106,28 @@ static inline void MUTEX_EXIT(afs_kmutex_t *l) static inline int CV_WAIT(afs_kcondvar_t *cv, afs_kmutex_t *l) { int isAFSGlocked = ISAFS_GLOCK(); + sigset_t saved_set; if (isAFSGlocked) AFS_GUNLOCK(); MUTEX_EXIT(l); + spin_lock_irq(¤t->sigmask_lock); + saved_set = current->blocked; + sigfillset(¤t->blocked); + recalc_sigpending(current); + spin_unlock_irq(¤t->sigmask_lock); + #if defined(AFS_LINUX24_ENV) interruptible_sleep_on((wait_queue_head_t *)cv); #else interruptible_sleep_on((struct wait_queue**)cv); #endif + spin_lock_irq(¤t->sigmask_lock); + current->blocked = saved_set; + recalc_sigpending(current); + spin_unlock_irq(¤t->sigmask_lock); + MUTEX_ENTER(l); if (isAFSGlocked) AFS_GLOCK(); @@ -126,16 +138,28 @@ static inline int CV_TIMEDWAIT(afs_kcondvar_t *cv, afs_kmutex_t *l, int waittime { int isAFSGlocked = ISAFS_GLOCK(); long t = waittime * HZ / 1000; + sigset_t saved_set; if (isAFSGlocked) AFS_GUNLOCK(); MUTEX_EXIT(l); + spin_lock_irq(¤t->sigmask_lock); + saved_set = current->blocked; + sigfillset(¤t->blocked); + recalc_sigpending(current); + spin_unlock_irq(¤t->sigmask_lock); + #if defined(AFS_LINUX24_ENV) t = interruptible_sleep_on_timeout((wait_queue_head_t *)cv, t); #else t = interruptible_sleep_on_timeout((struct wait_queue**)cv, t); #endif + spin_lock_irq(¤t->sigmask_lock); + current->blocked = saved_set; + recalc_sigpending(current); + spin_unlock_irq(¤t->sigmask_lock); + MUTEX_ENTER(l); if (isAFSGlocked) AFS_GLOCK();