changeset 4237:589ab12dbe3d

(PTY_OPEN): Use sigaction, not sigsetmask.
author Richard M. Stallman <rms@gnu.org>
date Fri, 23 Jul 1993 04:16:38 +0000
parents 8e14db210975
children 6a22eb586080
files src/s/irix5-0.h
diffstat 1 files changed, 22 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/s/irix5-0.h	Fri Jul 23 01:43:39 1993 +0000
+++ b/src/s/irix5-0.h	Fri Jul 23 04:16:38 1993 +0000
@@ -48,17 +48,26 @@
 #define PTY_ITERATION
 /* Here is how to do it.  */
 /* It is necessary to prevent SIGCHLD signals within _getpty.
-   So we block them. */
-#define PTY_OPEN						\
-{								\
-  int mask = sigblock (sigmask (SIGCHLD));			\
-  char *name = _getpty (&fd, O_RDWR | O_NDELAY, 0600, 0);	\
-  sigsetmask(mask);						\
-  if (name == 0)						\
-    return -1;							\
-  if (fd < 0)							\
-    return -1;							\
-  if (fstat (fd, &stb) < 0)					\
-    return -1;							\
-  strcpy (pty_name, name);					\
+   So we block them. But since all of Emacs uses classic SYSV signal()
+   signals, there is no reliable way to do this (unlike BSD sighold or
+   POSIX sigaction).  On Irix 5.* systems, the implementation of
+   sigaction is as close as you can get to a universal. */
+#define PTY_OPEN					    \
+{							    \
+  struct sigaction ocstat, cstat;			    \
+  char * name;						    \
+  sigemptyset(&cstat.sa_mask);				    \
+  cstat.sa_handler = SIG_DFL;				    \
+  cstat.sa_flags = 0;					    \
+  sigaction(SIGCLD, &cstat, &ocstat);			    \
+  name = _getpty (&fd, O_RDWR | O_NDELAY, 0600, 0);	    \
+  sigaction(SIGCLD, &ocstat, (struct sigaction *)0);	    \
+  if (name == 0)					    \
+    return -1;						    \
+  if (fd < 0)						    \
+    return -1;						    \
+  if (fstat (fd, &stb) < 0)				    \
+    return -1;						    \
+  strcpy (pty_name, name);				    \
 }
+