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 <[email protected]> --- Unfortunately we're stuck with using Upstart, and in the tradition of trying to keep as close to upstream as possible, I'm sending this for review... According to http://upstart.ubuntu.com/ Upstart is used by a number of distributions (Ubuntu, Fedora, Debian, and of course Maemo) so this is probably a worthwhile patch. include/opaque.h | 1 + os/connection.c | 5 +++++ os/utils.c | 5 +++++ 3 files changed, 11 insertions(+), 0 deletions(-) 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..92aec38 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) { + kill (getpid (), SIGSTOP); + } #endif } diff --git a/os/utils.c b/os/utils.c index 21e25e0..d19ffb0 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 Enable support for Upstart's signaling method\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 _______________________________________________ xorg-devel mailing list [email protected] http://lists.x.org/mailman/listinfo/xorg-devel
