]> asedeno.scripts.mit.edu Git - PuTTY.git/blobdiff - unix/pty.c
I'd rather not keep losing these little test files, so here's some
[PuTTY.git] / unix / pty.c
index 86e1e41023d3c5cff327298f497392c2c9b5f431..b9bd510b1f83326caecba322f005f66240d87fc2 100644 (file)
@@ -474,6 +474,8 @@ int pty_select_result(int fd, int event)
 #endif
            from_backend(pty_frontend, 0, message, strlen(message));
        }
+
+       notify_remote_exit(pty_frontend);
     }
     return !finished;
 }
@@ -577,9 +579,9 @@ static const char *pty_init(void *frontend, void **backend_handle, Config *cfg,
        ioctl(slavefd, TIOCSCTTY, 1);
        pgrp = getpid();
        tcsetpgrp(slavefd, pgrp);
-       setpgrp(pgrp, pgrp);
+       setpgid(pgrp, pgrp);
        close(open(pty_name, O_WRONLY, 0));
-       setpgrp(pgrp, pgrp);
+       setpgid(pgrp, pgrp);
        /* Close everything _else_, for tidiness. */
        for (i = 3; i < 1024; i++)
            close(i);
@@ -619,10 +621,18 @@ static const char *pty_init(void *frontend, void **backend_handle, Config *cfg,
        /*
         * SIGINT and SIGQUIT may have been set to ignored by our
         * parent, particularly by things like sh -c 'pterm &' and
-        * some window managers. Reverse this for our child process.
+        * some window managers. SIGCHLD, meanwhile, has been
+        * tinkered with by the watchdog process. Reverse all this
+        * for our child process.
         */
        putty_signal(SIGINT, SIG_DFL);
        putty_signal(SIGQUIT, SIG_DFL);
+       {
+           sigset_t set;
+           sigemptyset(&set);
+           sigaddset(&set, SIGCHLD);
+           sigprocmask(SIG_UNBLOCK, &set, NULL);
+       }
        if (pty_argv)
            execvp(pty_argv[0], pty_argv);
        else {