diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2016-02-28 20:42:50 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2016-02-28 21:39:28 +0200 |
commit | 0d0a148121dcb8edd49cad900f27141336576f9d (patch) | |
tree | d458628bb80d5972f540826e1cf3fc8b8224265b /src/pies.c | |
parent | 14e0802da5587179607f3340d105914435ee117a (diff) | |
download | pies-0d0a148121dcb8edd49cad900f27141336576f9d.tar.gz pies-0d0a148121dcb8edd49cad900f27141336576f9d.tar.bz2 |
Synchronize changes in runlevel with configuration reloads
State transition algorithm used this far could cause spurious component
wakeups in some cases. Consider the following scenario: being in
runlevel N, the configuration is changed so that a component X is added
at runlevel N. Then a change to runlevel N+1 is initiated. What happens
then is that X is woken up (still being in runlevel N) and terminated
shortly afterwards, upon entering runlevel N+1.
To avoid this, configuration must be reloaded after runlevel changes.
* src/ctl.c (res_runlevel): Don't initiate ACTION_RELOAD after
setting the runlevel.
* src/pies.c (main): Begin main event loop with call
to pies_pause.
* src/pies.h (pies_set_hook): New proto.
(inittrans): Remove proto.
* src/socket.c (pies_set_hook): New function.
(pies_pause): Call pies_pause_hook if defined.
* src/sysvinit.c (inittrans): Change to static.
If transition was initiated by user (e.g. by invoking telinit),
schedule ACTION_RELOAD.
(sysvinit_begin): Set inittrans as pies_hook
Diffstat (limited to 'src/pies.c')
-rw-r--r-- | src/pies.c | 4 |
1 files changed, 1 insertions, 3 deletions
@@ -2220,9 +2220,7 @@ main (int argc, char **argv) do { - if (init_process && inittrans ()) - action = ACTION_CONT; - else if (children_op == PIES_CHLD_NONE) + if (children_op == PIES_CHLD_NONE) pies_pause (); switch (action) { |