From 38f17a65249b2371beecae46b6a154aca34df35b Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Oct 15 2007 19:34:20 +0000 Subject: * Mon Oct 15 2007 Adam Jackson 1.3.0.0-31.jx - xserver-1.3.0-late-sigusr1.patch: Test, move kill(getppid(), SIGUSR1) as late as possible. --- diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 8ae05cb..036a086 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -9,7 +9,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.3.0.0 -Release: 31%{?dist} +Release: 32%{?dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -83,6 +83,8 @@ Patch2503: xserver-1.3.0-rom-search.patch Patch2504: xserver-1.3.0-domain-obiwan.patch Patch2505: xserver-1.3.0-pci-device-enable.patch +Patch9999: xserver-1.3.0-late-sigusr1.patch + %define moduledir %{_libdir}/xorg/modules %define drimoduledir %{_libdir}/dri %define sdkdir %{_includedir}/xorg @@ -345,6 +347,8 @@ Xserver source code needed to build VNC server (Xvnc) %patch2504 -p1 -b .domain-obiwan %patch2505 -p1 -b .device-enable +%patch9999 -p1 -b .jx + %build %if %{fedora} == 7 @@ -612,6 +616,10 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Mon Oct 15 2007 Adam Jackson 1.3.0.0-31.jx +- xserver-1.3.0-late-sigusr1.patch: Test, move kill(getppid(), SIGUSR1) + as late as possible. + * Fri Oct 12 2007 Adam Jackson 1.3.0.0-31 - xorg-x11-server-Red-Hat-extramodes.patch: Remove 2560x1600 GTF timing. diff --git a/xserver-1.3.0-late-sigusr1.patch b/xserver-1.3.0-late-sigusr1.patch new file mode 100644 index 0000000..3a21a94 --- /dev/null +++ b/xserver-1.3.0-late-sigusr1.patch @@ -0,0 +1,152 @@ +diff -up xorg-server-1.3.0.0/dix/main.c.jx xorg-server-1.3.0.0/dix/main.c +--- xorg-server-1.3.0.0/dix/main.c.jx 2006-11-16 13:01:23.000000000 -0500 ++++ xorg-server-1.3.0.0/dix/main.c 2007-10-15 14:37:13.000000000 -0400 +@@ -442,6 +442,8 @@ main(int argc, char *argv[], char *envp[ + FatalError("could not create connection block info"); + } + ++ NotifyParentProcess(); ++ + Dispatch(); + + /* Now free up whatever must be freed */ +diff -up xorg-server-1.3.0.0/include/os.h.jx xorg-server-1.3.0.0/include/os.h +--- xorg-server-1.3.0.0/include/os.h.jx 2007-02-16 11:03:12.000000000 -0500 ++++ xorg-server-1.3.0.0/include/os.h 2007-10-15 14:37:13.000000000 -0400 +@@ -124,6 +124,8 @@ extern void ResetOsBuffers(void); + + extern void InitConnectionLimits(void); + ++extern void NotifyParentProcess(void); ++ + extern void CreateWellKnownSockets(void); + + extern void ResetWellKnownSockets(void); +diff -up xorg-server-1.3.0.0/os/connection.c.jx xorg-server-1.3.0.0/os/connection.c +--- xorg-server-1.3.0.0/os/connection.c.jx 2007-02-17 20:37:56.000000000 -0500 ++++ xorg-server-1.3.0.0/os/connection.c 2007-10-15 14:42:19.000000000 -0400 +@@ -370,6 +370,52 @@ InitConnectionLimits(void) + #endif + } + ++/* ++ * If SIGUSR1 was set to SIG_IGN when the server started, assume that either ++ * ++ * a- The parent process is ignoring SIGUSR1 ++ * ++ * or ++ * ++ * b- The parent process is expecting a SIGUSR1 ++ * when the server is ready to accept connections ++ * ++ * In the first case, the signal will be harmless, in the second case, ++ * the signal will be quite useful. ++ */ ++static void ++InitParentProcess(void) ++{ ++#if !defined(WIN32) ++ OsSigHandlerPtr handler; ++ handler = OsSignal (SIGUSR1, SIG_IGN); ++ if ( handler == SIG_IGN) ++ RunFromSmartParent = TRUE; ++ OsSignal(SIGUSR1, handler); ++ ParentProcess = getppid (); ++#ifdef __UNIXOS2__ ++ /* ++ * fg030505: under OS/2, xinit is not the parent process but ++ * the "grant parent" process of the server because execvpe() ++ * presents us an additional process number; ++ * GetPPID(pid) is part of libemxfix ++ */ ++ ParentProcess = GetPPID (ParentProcess); ++#endif /* __UNIXOS2__ */ ++#endif ++} ++ ++void ++NotifyParentProcess(void) ++{ ++#if !defined(WIN32) ++ if (RunFromSmartParent) { ++ if (ParentProcess > 1) { ++ kill (ParentProcess, SIGUSR1); ++ } ++ } ++#endif ++} + + /***************** + * CreateWellKnownSockets +@@ -382,7 +428,6 @@ CreateWellKnownSockets(void) + int i; + int partial; + char port[20]; +- OsSigHandlerPtr handler; + + FD_ZERO(&AllSockets); + FD_ZERO(&AllClients); +@@ -436,42 +481,9 @@ CreateWellKnownSockets(void) + OsSignal (SIGTERM, GiveUp); + XFD_COPYSET (&WellKnownConnections, &AllSockets); + ResetHosts(display); +- /* +- * Magic: If SIGUSR1 was set to SIG_IGN when +- * the server started, assume that either +- * +- * a- The parent process is ignoring SIGUSR1 +- * +- * or +- * +- * b- The parent process is expecting a SIGUSR1 +- * when the server is ready to accept connections +- * +- * In the first case, the signal will be harmless, +- * in the second case, the signal will be quite +- * useful +- */ +-#if !defined(WIN32) +- handler = OsSignal (SIGUSR1, SIG_IGN); +- if ( handler == SIG_IGN) +- RunFromSmartParent = TRUE; +- OsSignal(SIGUSR1, handler); +- ParentProcess = getppid (); +-#ifdef __UNIXOS2__ +- /* +- * fg030505: under OS/2, xinit is not the parent process but +- * the "grant parent" process of the server because execvpe() +- * presents us an additional process number; +- * GetPPID(pid) is part of libemxfix +- */ +- ParentProcess = GetPPID (ParentProcess); +-#endif /* __UNIXOS2__ */ +- if (RunFromSmartParent) { +- if (ParentProcess > 1) { +- kill (ParentProcess, SIGUSR1); +- } +- } +-#endif ++ ++ InitParentProcess(); ++ + #ifdef XDMCP + XdmcpInit (); + #endif +@@ -520,16 +532,7 @@ ResetWellKnownSockets (void) + + ResetAuthorization (); + ResetHosts(display); +- /* +- * See above in CreateWellKnownSockets about SIGUSR1 +- */ +-#if !defined(WIN32) +- if (RunFromSmartParent) { +- if (ParentProcess > 1) { +- kill (ParentProcess, SIGUSR1); +- } +- } +-#endif ++ + /* + * restart XDMCP + */