fix impact minimizing code

This commit is contained in:
Lennart Poettering 2010-01-29 04:26:30 +01:00
parent 9f04bd5251
commit c20cae324d
2 changed files with 21 additions and 7 deletions

8
main.c
View File

@ -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;

View File

@ -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;