38f17a6524
- xserver-1.3.0-late-sigusr1.patch: Test, move kill(getppid(), SIGUSR1) as late as possible.
153 lines
4.2 KiB
Diff
153 lines
4.2 KiB
Diff
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
|
|
*/
|