summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-11-26 02:13:41 +0100
committerLennart Poettering <lennart@poettering.net>2013-11-26 02:26:31 +0100
commit255baef68a8d9d74cb3b846f93c290225ad162aa (patch)
treea814737c0cd3e63bc643c738438539dc9325e622 /src/core
parentd420282b28f50720e233ccb1c02547c562195653 (diff)
core: add new "flush" job mode to cancel all other jobs when queuing a new job
Diffstat (limited to 'src/core')
-rw-r--r--src/core/job.c3
-rw-r--r--src/core/job.h1
-rw-r--r--src/core/transaction.c2
3 files changed, 4 insertions, 2 deletions
diff --git a/src/core/job.c b/src/core/job.c
index 9cd6ce24b8..557917a70b 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 3f6357a054..c23a38029d 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 e2ff0bd1e5..36e31c45c9 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 */