[PATCH v2] os: added the -upstart option for Upstart's signaling method.

Oliver McFadden oliver.mcfadden at nokia.com
Wed Feb 24 00:39:13 PST 2010


This is very similar to the RunFromSmartParent option, except we do not
send the signal to our parent process, but our own process instead; also
the signal is SIGSTOP, not SIGUSR1.

Upstart will detect that our process has stopped, and interprets this as
"process ready" (to accept clients), send us SIGCONT, and move our job
from the SPAWNED to RUNNING status.

Signed-off-by: Oliver McFadden <oliver.mcfadden at nokia.com>
---
 doc/Xserver.man.pre |    5 +++++
 include/opaque.h    |    1 +
 os/connection.c     |    5 +++++
 os/utils.c          |    5 +++++
 4 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/doc/Xserver.man.pre b/doc/Xserver.man.pre
index 8144c8a..bb4be97 100644
--- a/doc/Xserver.man.pre
+++ b/doc/Xserver.man.pre
@@ -327,6 +327,11 @@ disables smart scheduling on platforms that support the smart scheduler.
 sets the smart scheduler's scheduling interval to
 .I interval
 milliseconds.
+.TP 8
+.B \-upstart
+enables support for Upstart's signaling method.  Only enable when you are
+starting the X server from Upstart otherwise the server will remain stopped
+forever!
 .SH XDMCP OPTIONS
 X servers that support XDMCP have the following options.
 See the \fIX Display Manager Control Protocol\fP specification for more
diff --git a/include/opaque.h b/include/opaque.h
index b3c7c70..f8c0000 100644
--- a/include/opaque.h
+++ b/include/opaque.h
@@ -55,6 +55,7 @@ extern _X_EXPORT int defaultBackingStore;
 extern _X_EXPORT Bool disableBackingStore;
 extern _X_EXPORT Bool enableBackingStore;
 extern _X_EXPORT Bool PartialNetwork;
+extern _X_EXPORT Bool RunFromUpstart;
 #ifndef NOLOGOHACK
 extern _X_EXPORT int logoScreenSaver;
 #endif
diff --git a/os/connection.c b/os/connection.c
index 3ff93bb..58bc373 100644
--- a/os/connection.c
+++ b/os/connection.c
@@ -146,6 +146,8 @@ Bool NewOutputPending;		/* not yet attempted to write some new output */
 Bool AnyClientsWriteBlocked;	/* true if some client blocked on write */
 
 static Bool RunFromSmartParent;	/* send SIGUSR1 to parent process */
+Bool RunFromUpstart;		/* send SIGSTOP to our own process;
+				   Upstart will send SIGCONT back. */
 Bool PartialNetwork;	/* continue even if unable to bind all addrs */
 static Pid_t ParentProcess;
 
@@ -357,6 +359,9 @@ NotifyParentProcess(void)
 	    kill (ParentProcess, SIGUSR1);
 	}
     }
+    if (RunFromUpstart) {
+	raise (SIGSTOP);
+    }
 #endif
 }
 
diff --git a/os/utils.c b/os/utils.c
index 21e25e0..a95038e 100644
--- a/os/utils.c
+++ b/os/utils.c
@@ -538,6 +538,7 @@ void UseMsg(void)
 #endif
     ErrorF("-dumbSched             Disable smart scheduling, enable old behavior\n");
     ErrorF("-schedInterval int     Set scheduler interval in msec\n");
+    ErrorF("-upstart               Only enable when running with Upstart installed!\n");
     ErrorF("+extension name        Enable extension\n");
     ErrorF("-extension name        Disable extension\n");
 #ifdef XDMCP
@@ -936,6 +937,10 @@ ProcessCommandLine(int argc, char *argv[])
 		UseMsg ();
 	}
 #endif
+	else if ( strcmp( argv[i], "-upstart") == 0)
+	{
+	    RunFromUpstart = TRUE;
+	}
 	else if ( strcmp( argv[i], "+extension") == 0)
 	{
 	    if (++i < argc)
-- 
1.6.1



More information about the xorg-devel mailing list