From 9a07ae91c39ded5541302d91aae81e5d137e4d06 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Fri, 31 Jan 2003 22:33:36 +0000 Subject: [PATCH] more-redhate-beta-fun-20030131 apparently having recalc_sigpending stay the same was just as hard as continuing to export the same level of functionality, so we get neither. --- src/afs/LINUX/osi_machdep.h | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/afs/LINUX/osi_machdep.h b/src/afs/LINUX/osi_machdep.h index 70b0f3028..031f4db32 100644 --- a/src/afs/LINUX/osi_machdep.h +++ b/src/afs/LINUX/osi_machdep.h @@ -31,7 +31,34 @@ #endif #ifdef RECALC_SIGPENDING_TAKES_VOID -#define PENDING(p,b) has_pending_signals(&(p)->signal, (b)) +/* Principal of maximum uselessness says we need to provide this */ +static inline int _has_pending_signals(sigset_t *signal, sigset_t *blocked) +{ + unsigned long ready; + long i; + + switch (_NSIG_WORDS) { + default: + for (i = _NSIG_WORDS, ready = 0; --i >= 0 ;) + ready |= signal->sig[i] &~ blocked->sig[i]; + break; + + case 4: ready = signal->sig[3] &~ blocked->sig[3]; + ready |= signal->sig[2] &~ blocked->sig[2]; + ready |= signal->sig[1] &~ blocked->sig[1]; + ready |= signal->sig[0] &~ blocked->sig[0]; + break; + + case 2: ready = signal->sig[1] &~ blocked->sig[1]; + ready |= signal->sig[0] &~ blocked->sig[0]; + break; + + case 1: ready = signal->sig[0] &~ blocked->sig[0]; + } + return ready != 0; +} + +#define PENDING(p,b) _has_pending_signals(&(p)->signal, (b)) static inline void _recalc_sigpending_tsk(struct task_struct *t) { t->sigpending = PENDING(&t->pending, &t->blocked) || -- 2.39.5