diff options
Diffstat (limited to 'x11-base/xorg-server/files/1.3.0.0-fix-xkb-openoffice-hangs.patch')
-rw-r--r-- | x11-base/xorg-server/files/1.3.0.0-fix-xkb-openoffice-hangs.patch | 55 |
1 files changed, 0 insertions, 55 deletions
diff --git a/x11-base/xorg-server/files/1.3.0.0-fix-xkb-openoffice-hangs.patch b/x11-base/xorg-server/files/1.3.0.0-fix-xkb-openoffice-hangs.patch deleted file mode 100644 index 88df93b..0000000 --- a/x11-base/xorg-server/files/1.3.0.0-fix-xkb-openoffice-hangs.patch +++ /dev/null @@ -1,55 +0,0 @@ -https://bugs.gentoo.org/show_bug.cgi?id=197104 - -commit a5b8053606d6e786cdcf6734f271acc05f9cc588 -Author: Adam Jackson <ajax@benzedrine.nwnk.net> -Date: Tue Sep 11 11:37:06 2007 -0400 - - Ignore - not just block - SIGALRM around Popen()/Pclose(). - - Because our "popen" implementation uses stdio, and because nobody's stdio - library is capable of surviving signals, we need to make absolutely sure - that we hide the SIGALRM from the smart scheduler. Otherwise, when you - open a menu in openoffice, and it recompiles XKB to deal with the - accelerators, and you popen xkbcomp because we suck, then the scheduler - will tell you you're taking forever doing something stupid, and the - wait() code will get confused, and input will hang and your CPU usage - slams to 100%. Down, not across. - -diff --git a/os/utils.c b/os/utils.c -index 3bb7dbe..afcaae4 100644 ---- a/os/utils.c -+++ b/os/utils.c -@@ -1720,6 +1720,8 @@ static struct pid { - int pid; - } *pidlist; - -+static sighandler_t old_alarm = NULL; /* XXX horrible awful hack */ -+ - pointer - Popen(char *command, char *type) - { -@@ -1741,11 +1743,15 @@ Popen(char *command, char *type) - return NULL; - } - -+ /* Ignore the smart scheduler while this is going on */ -+ old_alarm = signal(SIGALRM, SIG_IGN); -+ - switch (pid = fork()) { - case -1: /* error */ - close(pdes[0]); - close(pdes[1]); - xfree(cur); -+ signal(SIGALRM, old_alarm); - return NULL; - case 0: /* child */ - if (setgid(getgid()) == -1) -@@ -1921,6 +1927,8 @@ Pclose(pointer iop) - /* allow EINTR again */ - OsReleaseSignals (); - -+ signal(SIGALRM, old_alarm); -+ - return pid == -1 ? -1 : pstat; - } - |