From 41b02ec77e54871eaa593c50fb31809814f627a7 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 11 Aug 2010 04:02:58 +0200 Subject: [PATCH] unit: make sure a job for a service of type 'finish' succeeds if the process terminates cleanly --- src/unit.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/unit.c b/src/unit.c index 881f91a6..b93777be 100644 --- a/src/unit.c +++ b/src/unit.c @@ -1034,7 +1034,9 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) { job_finish_and_invalidate(u->meta.job, true); else if (u->meta.job->state == JOB_RUNNING && ns != UNIT_ACTIVATING) { unexpected = true; - job_finish_and_invalidate(u->meta.job, false); + + if (UNIT_IS_INACTIVE_OR_MAINTENANCE(ns)) + job_finish_and_invalidate(u->meta.job, ns != UNIT_MAINTENANCE); } break; @@ -1047,7 +1049,9 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) { job_finish_and_invalidate(u->meta.job, true); else if (ns != UNIT_ACTIVATING && ns != UNIT_RELOADING) { unexpected = true; - job_finish_and_invalidate(u->meta.job, false); + + if (UNIT_IS_INACTIVE_OR_MAINTENANCE(ns)) + job_finish_and_invalidate(u->meta.job, ns != UNIT_MAINTENANCE); } } @@ -1057,7 +1061,7 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) { case JOB_RESTART: case JOB_TRY_RESTART: - if (ns == UNIT_INACTIVE || ns == UNIT_MAINTENANCE) + if (UNIT_IS_INACTIVE_OR_MAINTENANCE(ns)) job_finish_and_invalidate(u->meta.job, true); else if (u->meta.job->state == JOB_RUNNING && ns != UNIT_DEACTIVATING) { unexpected = true; -- 2.39.5