summaryrefslogtreecommitdiff
path: root/os
diff options
context:
space:
mode:
authorVignatti Tiago (Nokia-MS/Helsinki) <tiago.vignatti@nokia.com>2010-08-30 21:24:30 +0300
committerKeith Packard <keithp@keithp.com>2010-09-10 11:54:14 -0700
commit5b680f2c23fb3d35c721647d0334f63297589371 (patch)
tree5d591bef70d27876c13513f929638b6f20d97532 /os
parentca0d578d29f37b61e62556fff59732741885625b (diff)
os: add -sigstop option for Upstart (or equivalent) startup
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 <oliver.mcfadden@nokia.com> Acked-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Tiago Vignatti <tiago.vignatti@nokia.com> Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'os')
-rw-r--r--os/connection.c4
-rw-r--r--os/utils.c5
2 files changed, 9 insertions, 0 deletions
diff --git a/os/connection.c b/os/connection.c
index 77910be52..28cd1935c 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,8 @@ NotifyParentProcess(void)
kill (ParentProcess, SIGUSR1);
}
}
+ if (RunFromSigStopParent)
+ raise (SIGSTOP);
#endif
}
diff --git a/os/utils.c b/os/utils.c
index 51455cca1..f30674ba5 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)