From: Lennart Poettering Date: Fri, 29 Jan 2010 03:26:30 +0000 (+0100) Subject: fix impact minimizing code X-Git-Tag: v1~751 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=c20cae324d93e7fcdb8618e37c3ac377d87edb97 fix impact minimizing code --- diff --git a/main.c b/main.c index be733f0cd..26d327cfa 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 fd219b030..06a171ff2 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;