This repository has been archived on 2023-08-20. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
KableDistro/blfs-sources/luit-1.0.1-race-1.patch

89 lines
2.0 KiB
Diff

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);