I think I've just fixed Debian bug #166396. The +ut option was
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sun, 11 May 2003 12:28:53 +0000 (12:28 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sun, 11 May 2003 12:28:53 +0000 (12:28 +0000)
causing pty_utmp_helper_pipe to be closed, but its fd was kept
around even when stale, and closed again when the main child process
terminated - by which time the fd number had been reused for a
rather more vital fd, which GTK didn't appreciate having closed
under its feet. Hence, spin on POLLNVAL. Should now be sorted.

git-svn-id: svn://svn.tartarus.org/sgt/putty@3185 cda61777-01e9-0310-a592-d414129be87e

unix/pty.c

index 55282d2..7f46f1a 100644 (file)
@@ -517,9 +517,10 @@ static const char *pty_init(void *frontend, void **backend_handle, Config *cfg,
      * Stamp utmp (that is, tell the utmp helper process to do so),
      * or not.
      */
-    if (!cfg->stamp_utmp)
+    if (!cfg->stamp_utmp) {
        close(pty_utmp_helper_pipe);   /* just let the child process die */
-    else {
+       pty_utmp_helper_pipe = -1;
+    } else {
        char *location = get_x_display(pty_frontend);
        int len = strlen(location)+1, pos = 0;   /* +1 to include NUL */
        while (pos < len) {
@@ -527,6 +528,7 @@ static const char *pty_init(void *frontend, void **backend_handle, Config *cfg,
            if (ret < 0) {
                perror("pterm: writing to utmp helper process");
                close(pty_utmp_helper_pipe);   /* arrgh, just give up */
+               pty_utmp_helper_pipe = -1;
                break;
            }
            pos += ret;
@@ -666,7 +668,10 @@ static void pty_close(void)
        close(pty_master_fd);
        pty_master_fd = -1;
     }
-    close(pty_utmp_helper_pipe);       /* this causes utmp to be cleaned up */
+    if (pty_utmp_helper_pipe >= 0) {
+       close(pty_utmp_helper_pipe);   /* this causes utmp to be cleaned up */
+       pty_utmp_helper_pipe = -1;
+    }
 }
 
 /*