From 58dcb876268d7df73384b5b257ae3bcda416cdfa Mon Sep 17 00:00:00 2001 From: simon Date: Sun, 11 May 2003 12:28:53 +0000 Subject: [PATCH] I think I've just fixed Debian bug #166396. The +ut option was 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 | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/unix/pty.c b/unix/pty.c index 55282d2f..7f46f1aa 100644 --- a/unix/pty.c +++ b/unix/pty.c @@ -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; + } } /* -- 2.11.0