summaryrefslogtreecommitdiff
path: root/src/core/transaction.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2019-03-22 20:57:30 +0100
committerLennart Poettering <lennart@poettering.net>2019-03-27 12:37:37 +0100
commit50cbaba4fe5a32850998682699322d012e597e4a (patch)
treee5c26a2e173f20ce57e67168c55859a0b90abbb2 /src/core/transaction.c
parent49bd196d693efe0acfc8d56c4e3d8f7ba9f91b5d (diff)
downloadsystemd-50cbaba4fe5a32850998682699322d012e597e4a.tar.gz
core: add new API for enqueing a job with returning the transaction data
Diffstat (limited to 'src/core/transaction.c')
-rw-r--r--src/core/transaction.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/core/transaction.c b/src/core/transaction.c
index 2418332b9a..e0ba3c845f 100644
--- a/src/core/transaction.c
+++ b/src/core/transaction.c
@@ -589,7 +589,12 @@ rescan:
}
}
-static int transaction_apply(Transaction *tr, Manager *m, JobMode mode) {
+static int transaction_apply(
+ Transaction *tr,
+ Manager *m,
+ JobMode mode,
+ Set *affected_jobs) {
+
Iterator i;
Job *j;
int r;
@@ -646,6 +651,11 @@ static int transaction_apply(Transaction *tr, Manager *m, JobMode mode) {
job_add_to_dbus_queue(j);
job_start_timer(j, false);
job_shutdown_magic(j);
+
+ /* When 'affected' is specified, let's track all in it all jobs that were touched because of
+ * this transaction. */
+ if (affected_jobs)
+ (void) set_put(affected_jobs, j);
}
return 0;
@@ -658,7 +668,13 @@ rollback:
return r;
}
-int transaction_activate(Transaction *tr, Manager *m, JobMode mode, sd_bus_error *e) {
+int transaction_activate(
+ Transaction *tr,
+ Manager *m,
+ JobMode mode,
+ Set *affected_jobs,
+ sd_bus_error *e) {
+
Iterator i;
Job *j;
int r;
@@ -735,7 +751,7 @@ int transaction_activate(Transaction *tr, Manager *m, JobMode mode, sd_bus_error
return log_notice_errno(r, "Requested transaction contradicts existing jobs: %s", bus_error_message(e, r));
/* Tenth step: apply changes */
- r = transaction_apply(tr, m, mode);
+ r = transaction_apply(tr, m, mode, affected_jobs);
if (r < 0)
return log_warning_errno(r, "Failed to apply transaction: %m");