From: Lennart Poettering Date: Tue, 26 Nov 2013 01:13:41 +0000 (+0100) Subject: core: add new "flush" job mode to cancel all other jobs when queuing a new job X-Git-Tag: v209~1289 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=255baef68a8d9d74cb3b846f93c290225ad162aa;hp=d420282b28f50720e233ccb1c02547c562195653;p=elogind.git core: add new "flush" job mode to cancel all other jobs when queuing a new job --- diff --git a/src/core/job.c b/src/core/job.c index 9cd6ce24b..557917a70 100644 --- a/src/core/job.c +++ b/src/core/job.c @@ -1107,7 +1107,8 @@ static const char* const job_mode_table[_JOB_MODE_MAX] = { [JOB_REPLACE_IRREVERSIBLY] = "replace-irreversibly", [JOB_ISOLATE] = "isolate", [JOB_IGNORE_DEPENDENCIES] = "ignore-dependencies", - [JOB_IGNORE_REQUIREMENTS] = "ignore-requirements" + [JOB_IGNORE_REQUIREMENTS] = "ignore-requirements", + [JOB_FLUSH] = "flush", }; DEFINE_STRING_TABLE_LOOKUP(job_mode, JobMode); diff --git a/src/core/job.h b/src/core/job.h index 3f6357a05..c23a38029 100644 --- a/src/core/job.h +++ b/src/core/job.h @@ -84,6 +84,7 @@ enum JobMode { JOB_REPLACE, /* Replace an existing conflicting job */ JOB_REPLACE_IRREVERSIBLY,/* Like JOB_REPLACE + produce irreversible jobs */ JOB_ISOLATE, /* Start a unit, and stop all others */ + JOB_FLUSH, /* Flush out all other queued jobs when queing this one */ JOB_IGNORE_DEPENDENCIES, /* Ignore both requirement and ordering dependencies */ JOB_IGNORE_REQUIREMENTS, /* Ignore requirement dependencies */ _JOB_MODE_MAX, diff --git a/src/core/transaction.c b/src/core/transaction.c index e2ff0bd1e..36e31c45c 100644 --- a/src/core/transaction.c +++ b/src/core/transaction.c @@ -578,7 +578,7 @@ static int transaction_apply(Transaction *tr, Manager *m, JobMode mode) { /* Moves the transaction jobs to the set of active jobs */ - if (mode == JOB_ISOLATE) { + if (mode == JOB_ISOLATE || mode == JOB_FLUSH) { /* When isolating first kill all installed jobs which * aren't part of the new transaction */