On Fri, 2010-07-16 at 01:28 +0200, ext Peter Hutterer wrote: > On Wed, Jul 14, 2010 at 11:26:43AM +0300, Oliver McFadden wrote: > > This is very similar to the RunFromSmartParent (implicit) option, except > > we do not send the signal to our parent process, but our own process > > instead, and that signal is SIGSTOP, not SIGUSR1. > > > > Upstart or a similar equivalent program will detect this, realize that > > we are ready to accept clients now, send us SIGCONT and move our job > > status from SPAWNED to RUNNING. > > > > Signed-off-by: Oliver McFadden <[email protected]> > > --- > > 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..dfe440c 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 RunFromSigStopParent; > > #ifndef NOLOGOHACK > > extern _X_EXPORT int logoScreenSaver; > > #endif > > diff --git a/os/connection.c b/os/connection.c > > index c143fb6..c596731 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 RunFromSigStopParent; /* send SIGSTOP to our own process; Upstart (or > > + equivalent) 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 (RunFromSigStopParent) { > > + raise (SIGSTOP); > > + } > > #endif > > } > > > > diff --git a/os/utils.c b/os/utils.c > > index 51455cc..f30674b 100644 > > --- a/os/utils.c > > +++ b/os/utils.c > > @@ -527,6 +527,7 @@ void UseMsg(void) > > #endif > > ErrorF("-dumbSched Disable smart scheduling, enable old > > behavior\n"); > > ErrorF("-schedInterval int Set scheduler interval in msec\n"); > > + ErrorF("-sigstop Enable SIGSTOP based startup\n"); > > ErrorF("+extension name Enable extension\n"); > > ErrorF("-extension name Disable extension\n"); > > #ifdef XDMCP > > @@ -922,6 +923,10 @@ ProcessCommandLine(int argc, char *argv[]) > > else > > UseMsg (); > > } > > + else if ( strcmp( argv[i], "-sigstop") == 0) > > + { > > + RunFromSigStopParent = TRUE; > > + } > > else if ( strcmp( argv[i], "+extension") == 0) > > { > > if (++i < argc) > > -- > > 1.7.1.245.g7c42e > > Acked-by: Peter Hutterer <[email protected]>
Thanks, though I think I've missed the merge window on this one. Oh well... :) -- Oliver. _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
