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