summaryrefslogtreecommitdiff
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
parent9f04bd5251b3c2e17c53cf28feb95e36e1991038 (diff)
fix impact minimizing code
-rw-r--r--main.c8
-rw-r--r--manager.c20
2 files changed, 21 insertions, 7 deletions
diff --git a/main.c b/main.c
index be733f0cd2..26d327cfac 100644
--- a/main.c
+++ b/main.c
@@ -42,10 +42,10 @@ int main(int argc, char *argv[]) {
printf("→ By jobs:\n");
manager_dump_jobs(m, stdout, "\t");
- /* if ((r = manager_loop(m)) < 0) { */
- /* log_error("Failed to run mainloop: %s", strerror(-r)); */
- /* goto finish; */
- /* } */
+ if ((r = manager_loop(m)) < 0) {
+ log_error("Failed to run mainloop: %s", strerror(-r));
+ goto finish;
+ }
retval = 0;
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;