[Bug 703800] Re: init: restart command fails to restart main process when pre-stop stanza exists
Patrick Hemmer
703800 at bugs.launchpad.net
Fri Jun 25 13:01:09 UTC 2021
> How is systemd relevant?
Because it replaced upstart, and support for discontinued software tends
to get much less attention. If the issue was known for years and wasn't
fixed while the software still had a future, it became extremely
unlikely to be fixed once it didn't have a future.
> Precise is still supported. Trusty will be supported until 2019.
It's now 2021, and Trusty is in it's extended security maintenance
phase, of which this issue certainly does not qualify for. So it seems
the assessment was accurate.
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to upstart in Ubuntu.
https://bugs.launchpad.net/bugs/703800
Title:
init: restart command fails to restart main process when pre-stop
stanza exists
Status in upstart :
Triaged
Status in upstart package in Ubuntu:
Triaged
Bug description:
While testing the portmap daemon's recent changes in Ubuntu which
cause statd to properly follow it on stop/start, I tried to restart
portmap, only to find that it was not in fact restarted.
This happens with any job that has a pre-stop. The reason is that in
job_restart(), the code does this:
job_change_goal (job, JOB_STOP);
job_change_goal (job, JOB_START);
job_change_goal will return as soon as the *first* state change has
been completed. If there is no pre-stop, that is the change from
JOB_RUNNING to JOB_KILLED, which does dutifully kill the main process.
However, if there is a pre-stop, the pre-stop is run, but then
job_change_state returns to job_change_goal, which then returns to
job_restart, which then changes the goal back to start, which makes
the new job_next_state() one that will bypass the change to
JOB_KILLED.
This was found on upstart v0.6.7-3 in Ubuntu, but also exists in the
code in the current trunk.
TEST CASE
1. create job file /etc/init/test-restart-prestop.conf with this content:
# test-restart-prestop
pre-stop exec /bin/true
exec /bin/sleep 3600
2. run "start test-restart-prestop" -- record pid of job
3. immediately run "restart test-restart-prestop" -- if bug is present, pid remains the same when it should be a new pid.
To manage notifications about this bug go to:
https://bugs.launchpad.net/upstart/+bug/703800/+subscriptions
More information about the foundations-bugs
mailing list