|
Right now the splash screen and rc script are
racing with each other so you occasionally see a few
shutdown messages before plymouth is up.
This commit ensures proper synchronization between prefdm,
plymouthd, and the rc script.
It does this by
1) fully stopping prefdm before letting rc start
2) fully starting plymouth before letting rc start
3) if prefdm is running (e.g. runlevel 5), waiting until it
is fully stopped before starting plymouthd
4) if prefdm is not running (e.g. runlevel 3), starting
plymouthd right away
One bit of complication in this commit is the "splash
manager". It's a layer of indirection needed to handle the
conditional mentioned in 3) and 4).
There's no way within an upstart job file to say "start
after the prefdm "stopped" event only if prefdm is not already
stopped". We really need this to effectively happen, though,
because if prefdm isn't in the process of stopping (because
it was never started in the first place), it will never emit
the stopped event and blocking for an event that never comes
mean shutdown would never start.
The splash manager checks if prefdm is already running and
uses that information to emit an appropriate event that the
plymouth-shutdown job can key of off.
Note, one implication of 4) is we are showing plymouth when
shutting down from runlevel 3 now. This is a change in
behavior, but makes sense, since we show plymouth when
starting up into runlevel 3.
|