more-redhate-beta-fun-20030131
authorDerrick Brashear <shadow@dementia.org>
Fri, 31 Jan 2003 22:33:36 +0000 (22:33 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 31 Jan 2003 22:33:36 +0000 (22:33 +0000)
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

index 70b0f30..031f4db 100644 (file)
 #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) ||