mirror of
https://github.com/systemd/systemd.git
synced 2025-03-11 20:58:27 +03:00
service: fix for RestartMode=direct option
With the fix done in PR28215, the unit restart job is created with type JOB_START. Because of that, it is not properly merged anymore with the old one: the merged job has state JOB_RUNNING. It should have state JOB_WAITING. I think that the old job is not cleaned up because we don't go through the failed state. With this fix, the merged job is properly created with state JOB_WAITING.
This commit is contained in:
parent
e568fea9fc
commit
2a39b91459
@ -217,7 +217,7 @@ static void job_merge_into_installed(Job *j, Job *other) {
|
||||
j->ignore_order = j->ignore_order || other->ignore_order;
|
||||
}
|
||||
|
||||
Job* job_install(Job *j) {
|
||||
Job* job_install(Job *j, JobMode mode) {
|
||||
Job **pj;
|
||||
Job *uj;
|
||||
|
||||
@ -235,7 +235,7 @@ Job* job_install(Job *j) {
|
||||
/* not conflicting, i.e. mergeable */
|
||||
|
||||
if (uj->state == JOB_WAITING ||
|
||||
(job_type_allows_late_merge(j->type) && job_type_is_superset(uj->type, j->type))) {
|
||||
(job_type_allows_late_merge(j->type) && mode != JOB_RESTART_DEPENDENCIES && job_type_is_superset(uj->type, j->type))) {
|
||||
job_merge_into_installed(uj, j);
|
||||
log_unit_debug(uj->unit,
|
||||
"Merged %s/%s into installed job %s/%s as %"PRIu32,
|
||||
|
@ -169,7 +169,7 @@ Job* job_new(Unit *unit, JobType type);
|
||||
Job* job_new_raw(Unit *unit);
|
||||
void job_unlink(Job *job);
|
||||
Job* job_free(Job *job);
|
||||
Job* job_install(Job *j);
|
||||
Job* job_install(Job *j, JobMode mode);
|
||||
int job_install_deserialized(Job *j);
|
||||
void job_uninstall(Job *j);
|
||||
void job_dump(Job *j, FILE *f, const char *prefix);
|
||||
|
@ -657,7 +657,7 @@ static int transaction_apply(
|
||||
/* Clean the job dependencies */
|
||||
transaction_unlink_job(tr, j, false);
|
||||
|
||||
installed_job = job_install(j);
|
||||
installed_job = job_install(j, mode);
|
||||
if (installed_job != j) {
|
||||
/* j has been merged into a previously installed job */
|
||||
if (tr->anchor_job == j)
|
||||
|
Loading…
x
Reference in New Issue
Block a user