Blame xserver-1.3.0-xkb-and-loathing.patch
|
|
e31b8a8 |
--- xorg-server-1.3.0.0/os/utils.c.jx 2007-04-25 13:28:05.000000000 -0400
|
|
|
e31b8a8 |
+++ xorg-server-1.3.0.0/os/utils.c 2007-04-30 14:33:04.000000000 -0400
|
|
|
e31b8a8 |
@@ -1725,6 +1725,8 @@
|
|
|
e31b8a8 |
int pid;
|
|
|
e31b8a8 |
} *pidlist;
|
|
|
e31b8a8 |
|
|
|
e31b8a8 |
+static sighandler_t old_alarm = NULL; /* XXX horrible awful hack */
|
|
|
e31b8a8 |
+
|
|
|
e31b8a8 |
pointer
|
|
|
e31b8a8 |
Popen(char *command, char *type)
|
|
|
e31b8a8 |
{
|
|
|
e31b8a8 |
@@ -1746,11 +1748,15 @@
|
|
|
e31b8a8 |
return NULL;
|
|
|
e31b8a8 |
}
|
|
|
e31b8a8 |
|
|
|
e31b8a8 |
+ /* Ignore the smart scheduler while this is going on */
|
|
|
e31b8a8 |
+ old_alarm = signal(SIGALRM, SIG_IGN);
|
|
|
e31b8a8 |
+
|
|
|
e31b8a8 |
switch (pid = fork()) {
|
|
|
e31b8a8 |
case -1: /* error */
|
|
|
e31b8a8 |
close(pdes[0]);
|
|
|
e31b8a8 |
close(pdes[1]);
|
|
|
e31b8a8 |
xfree(cur);
|
|
|
e31b8a8 |
+ signal(SIGALRM, old_alarm);
|
|
|
e31b8a8 |
return NULL;
|
|
|
e31b8a8 |
case 0: /* child */
|
|
|
e31b8a8 |
if (setgid(getgid()) == -1)
|
|
|
e31b8a8 |
@@ -1926,6 +1932,8 @@
|
|
|
e31b8a8 |
/* allow EINTR again */
|
|
|
e31b8a8 |
OsReleaseSignals ();
|
|
|
e31b8a8 |
|
|
|
e31b8a8 |
+ signal(SIGALRM, old_alarm);
|
|
|
e31b8a8 |
+
|
|
|
e31b8a8 |
return pid == -1 ? -1 : pstat;
|
|
|
e31b8a8 |
}
|
|
|
e31b8a8 |
|