libc: Fix the definition of SIGRTMAX
After this change, SIGRTMAX will be set to 64 (instead of 32 currently).
Note that this doesn't change the fact that our sigset_t is still defined
as a 32-bit unsigned integer, so most functions that deal with this type
won't support real-time signals though.
Change-Id: Ie1e2f97d646f1664f05a0ac9cac4a43278c3cfa8
diff --git a/libc/bionic/pthread.c b/libc/bionic/pthread.c
index a195018..34909fb 100644
--- a/libc/bionic/pthread.c
+++ b/libc/bionic/pthread.c
@@ -1858,7 +1858,13 @@
*/
int ret, old_errno = errno;
- ret = __rt_sigprocmask(how, set, oset, _NSIG / 8);
+ /* Use NSIG which corresponds to the number of signals in
+ * our 32-bit sigset_t implementation. As such, this function, or
+ * anything that deals with sigset_t cannot manage real-time signals
+ * (signo >= 32). We might want to introduce sigset_rt_t as an
+ * extension to do so in the future.
+ */
+ ret = __rt_sigprocmask(how, set, oset, NSIG / 8);
if (ret < 0)
ret = errno;
diff --git a/libc/docs/CHANGES.TXT b/libc/docs/CHANGES.TXT
index 3fbbee0..98b7fcf 100644
--- a/libc/docs/CHANGES.TXT
+++ b/libc/docs/CHANGES.TXT
@@ -16,6 +16,9 @@
- <unistd.h>: Add ftruncate64().
+- <signal.h>: Changed the definition of SIGRTMAX to 64. However, note that
+ sigset_t is only 32-bit and cannot deal with real-time signals.
+
-------------------------------------------------------------------------------
Differences between Android 2.3 and Android 2.2:
diff --git a/libc/include/signal.h b/libc/include/signal.h
index 4401164..91c3b00 100644
--- a/libc/include/signal.h
+++ b/libc/include/signal.h
@@ -42,12 +42,15 @@
typedef int sig_atomic_t;
-/* crepy NIG / _NSIG handling, just to be safe */
-#ifndef NSIG
-# define NSIG _NSIG
-#endif
+/* _NSIG is used by the SIGRTMAX definition under <asm/signal.h>, however
+ * its definition is part of a #if __KERNEL__ .. #endif block in the original
+ * kernel headers and is thus not part of our cleaned-up versions.
+ *
+ * Looking at the current kernel sources, it is defined as 64 for all
+ * architectures except for the 'mips' one which set it to 128.
+ */
#ifndef _NSIG
-# define _NSIG NSIG
+# define _NSIG 64
#endif
extern const char * const sys_siglist[];