r1424 - in trunk: . luit

dj at linuxfromscratch.org dj at linuxfromscratch.org
Thu Mar 2 21:58:38 PST 2006


Author: dj
Date: 2006-03-02 22:58:38 -0700 (Thu, 02 Mar 2006)
New Revision: 1424

Added:
   trunk/luit/
   trunk/luit/luit_1.0.1-race-1.patch
Log:
added luit race patch (for Xorg-7)

Added: trunk/luit/luit_1.0.1-race-1.patch
===================================================================
--- trunk/luit/luit_1.0.1-race-1.patch	                        (rev 0)
+++ trunk/luit/luit_1.0.1-race-1.patch	2006-03-03 05:58:38 UTC (rev 1424)
@@ -0,0 +1,88 @@
+Submitted By: DJ Lucas <dj_AT_linuxfromscratch_DOT_org>
+Date: 2006-03-03
+Initial Package Version: 6.8.2
+Origin: https://bugs.freedesktop.org/show_bug.cgi?id=1400
+Upstream Status: unclear, see below
+Description: prevents the race condition and deadlock in luit. Should
+apply both to XOrg and XFree86. Rediffed from xorg_6.8.2-luit_race-1.patch
+
+diff -Naur luit-X11R7.0-1.0.1-old/luit.c luit-X11R7.0-1.0.1/luit.c
+--- luit-X11R7.0-1.0.1-old/luit.c	2004-04-23 14:54:35.000000000 -0500
++++ luit-X11R7.0-1.0.1/luit.c	2006-02-28 20:06:14.000000000 -0600
+@@ -45,6 +45,8 @@
+ #include "charset.h"
+ #include "iso2022.h"
+ 
++static int p2c_waitpipe[2];
++static int c2p_waitpipe[2];
+ static Iso2022Ptr inputState = NULL, outputState = NULL;
+ 
+ static char *child_argv0 = NULL;
+@@ -462,6 +464,8 @@
+         exit(1);
+     }
+ 
++    pipe(p2c_waitpipe);
++    pipe(c2p_waitpipe);
+     pid = fork();
+     if(pid < 0) {
+         perror("Couldn't fork");
+@@ -470,8 +474,12 @@
+ 
+     if(pid == 0) {
+         close(pty);
++	close(p2c_waitpipe[1]);
++	close(c2p_waitpipe[0]);
+         child(line, path, child_argv);
+     } else {
++	close(p2c_waitpipe[0]);
++	close(c2p_waitpipe[1]);
+         free(child_argv);
+         free(path);
+         free(line);
+@@ -486,6 +494,7 @@
+ {
+     int tty;
+     int pgrp;
++    char tmp[10];
+ 
+     close(0);
+     close(1);
+@@ -501,6 +510,7 @@
+         kill(getppid(), SIGABRT);
+         exit(1);
+     }
++    write(c2p_waitpipe[1],"1",1);
+     
+     if(tty != 0)
+         dup2(tty, 0);
+@@ -512,6 +522,9 @@
+     if(tty > 2)
+         close(tty);
+     
++    read(p2c_waitpipe[0],tmp,1);
++    close(c2p_waitpipe[1]);
++    close(p2c_waitpipe[0]);
+     execvp(path, argv);
+     perror("Couldn't exec");
+     exit(1);
+@@ -535,7 +548,9 @@
+     int i;
+     int val;
+     int rc;
++    char tmp[10];
+ 
++    read(c2p_waitpipe[0],tmp,1);
+     if(verbose) {
+         reportIso2022(outputState);
+     }
+@@ -564,6 +579,9 @@
+ 
+     setWindowSize(0, pty);
+ 
++    write(p2c_waitpipe[1],"1",1);
++    close(c2p_waitpipe[0]);
++    close(p2c_waitpipe[1]);
+     for(;;) {
+         rc = waitForInput(0, pty);
+ 




More information about the patches mailing list