]> git.eshelyaron.com Git - emacs.git/commitdiff
(PTY_OPEN): Use sigaction, not sigsetmask.
authorRichard M. Stallman <rms@gnu.org>
Fri, 23 Jul 1993 04:16:38 +0000 (04:16 +0000)
committerRichard M. Stallman <rms@gnu.org>
Fri, 23 Jul 1993 04:16:38 +0000 (04:16 +0000)
src/s/irix5-0.h

index fe42458768aa1db3d44ecc420cccdd056f63162c..61928f08dfeaf161bf8a7b27f062d195cb7e29c4 100644 (file)
@@ -48,17 +48,26 @@ char *_getpty();
 #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);                                 \
 }
+