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]

Reply via email to