This bug still exists in current xterm, as far as I can tell. The following untested patch implements Richard Braakman's suggestion from 1997, slightly more portably.
Open questions: (1) Where should the logging be closed? (2) Is any additional portability goo needed to send this upstream (e.g. for systems without termios.h)? (3) Is anyone interested in testing it? I assign these changes to the public domain, since they're trivial. --- main.c 2007-04-10 04:39:13.000000000 -0400 +++ main.c.new 2007-04-10 04:56:45.000000000 -0400 @@ -4613,11 +4613,9 @@ #endif /* USE_SYSV_UTMP */ #endif /* HAVE_UTMP */ - close(screen->respond); /* close explicitly to avoid race with slave side */ -#ifdef ALLOWLOGGING - if (screen->logging) - CloseLog(screen); -#endif + /* Flush pending data before releasing ownership, so nobody else can + grab it */ + tcflush(screen->respond, TCOFLUSH); if (am_slave < 0) { /* restore ownership of tty and pty */ @@ -4625,6 +4623,16 @@ #if (defined(USE_PTY_DEVICE) && !defined(__sgi) && !defined(__hpux)) set_owner(ptydev, 0, 0, 0666U); #endif + + /* Close after releasing ownership to avoid race condition: other programs + grabbing it, and *then* having us release ownership... */ + + close(screen->respond); /* close explicitly to avoid race with slave side */ +#ifdef ALLOWLOGGING + if (screen->logging) + CloseLog(screen); +#endif + } #ifdef NO_LEAKS if (n == 0) { -- Nathanael Nerode <[EMAIL PROTECTED]> This space intentionally left blank. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]