diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-11-26 02:13:41 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-11-26 02:26:31 +0100 |
commit | 255baef68a8d9d74cb3b846f93c290225ad162aa (patch) | |
tree | a814737c0cd3e63bc643c738438539dc9325e622 /src/core | |
parent | d420282b28f50720e233ccb1c02547c562195653 (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.c | 3 | ||||
-rw-r--r-- | src/core/job.h | 1 | ||||
-rw-r--r-- | src/core/transaction.c | 2 |
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 */ |