summaryrefslogtreecommitdiff
path: root/manager.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-01-29 04:26:30 +0100
committerLennart Poettering <lennart@poettering.net>2010-01-29 04:26:30 +0100
commitc20cae324d93e7fcdb8618e37c3ac377d87edb97 (patch)
tree5ed0f4dfa854ad874f79be7fa2b114dcec2a707d /manager.c
parent9f04bd5251b3c2e17c53cf28feb95e36e1991038 (diff)
fix impact minimizing code
Diffstat (limited to 'manager.c')
-rw-r--r--manager.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/manager.c b/manager.c
index fd219b0304..06a171ff2e 100644
--- a/manager.c
+++ b/manager.c
@@ -563,6 +563,7 @@ static void transaction_minimize_impact(Manager *m) {
HASHMAP_FOREACH(j, m->transaction_jobs, i) {
LIST_FOREACH(transaction, j, j) {
+ bool stops_running_service, changes_existing_job;
/* If it matters, we shouldn't drop it */
if (j->matters_to_anchor)
@@ -571,12 +572,25 @@ static void transaction_minimize_impact(Manager *m) {
/* Would this stop a running service?
* Would this change an existing job?
* If so, let's drop this entry */
- if ((j->type != JOB_STOP || UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(j->unit))) &&
- (!j->unit->meta.job || job_type_is_conflicting(j->type, j->unit->meta.job->state)))
+
+ stops_running_service =
+ j->type == JOB_STOP && UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(j->unit));
+
+ changes_existing_job =
+ j->unit->meta.job && job_type_is_conflicting(j->type, j->unit->meta.job->state);
+
+ if (!stops_running_service && !changes_existing_job)
continue;
+ if (stops_running_service)
+ log_debug("%s/%s would stop a running service.", unit_id(j->unit), job_type_to_string(j->type));
+
+ if (changes_existing_job)
+ log_debug("%s/%s would change existing job.", unit_id(j->unit), job_type_to_string(j->type));
+
/* Ok, let's get rid of this */
- log_debug("Deleting %s/%s to minimize impact", unit_id(j->unit), job_type_to_string(j->type));
+ log_debug("Deleting %s/%s to minimize impact.", unit_id(j->unit), job_type_to_string(j->type));
+
transaction_delete_job(m, j);
again = true;
break;