#include <unistd.h>
#include <fcntl.h>
-#include "transaction.h"
#include "bus-errors.h"
-#include "dbus-common.h"
+#include "bus-util.h"
+#include "bus-error.h"
+#include "transaction.h"
static void transaction_unlink_job(Transaction *tr, Job *j, bool delete_dependencies);
return -EINVAL;
}
-static int transaction_merge_jobs(Transaction *tr, DBusError *e) {
+static int transaction_merge_jobs(Transaction *tr, sd_bus_error *e) {
Job *j;
Iterator i;
int r;
return -EAGAIN;
/* We couldn't merge anything. Failure */
- dbus_set_error(e, BUS_ERROR_TRANSACTION_JOBS_CONFLICTING, "Transaction contains conflicting jobs '%s' and '%s' for %s. Probably contradicting requirement dependencies configured.",
- job_type_to_string(t), job_type_to_string(k->type), k->unit->id);
+ sd_bus_error_setf(
+ e, BUS_ERROR_TRANSACTION_JOBS_CONFLICTING, "Transaction contains conflicting jobs '%s' and '%s' for %s. Probably contradicting requirement dependencies configured.",
+ job_type_to_string(t), job_type_to_string(k->type), k->unit->id);
return r;
}
}
return false;
}
-static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsigned generation, DBusError *e) {
+static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsigned generation, sd_bus_error *e) {
Iterator i;
Unit *u;
int r;
log_error("Unable to break cycle");
- dbus_set_error(e, BUS_ERROR_TRANSACTION_ORDER_IS_CYCLIC,
- "Transaction order is cyclic. See system logs for details.");
+ sd_bus_error_setf(e, BUS_ERROR_TRANSACTION_ORDER_IS_CYCLIC,
+ "Transaction order is cyclic. See system logs for details.");
return -ENOEXEC;
}
return 0;
}
-static int transaction_verify_order(Transaction *tr, unsigned *generation, DBusError *e) {
+static int transaction_verify_order(Transaction *tr, unsigned *generation, sd_bus_error *e) {
Job *j;
int r;
Iterator i;
}
}
-static int transaction_is_destructive(Transaction *tr, JobMode mode, DBusError *e) {
+static int transaction_is_destructive(Transaction *tr, JobMode mode, sd_bus_error *e) {
Iterator i;
Job *j;
if (j->unit->job && (mode == JOB_FAIL || j->unit->job->irreversible) &&
!job_type_is_superset(j->type, j->unit->job->type)) {
- dbus_set_error(e, BUS_ERROR_TRANSACTION_IS_DESTRUCTIVE, "Transaction is destructive.");
+ sd_bus_error_setf(e, BUS_ERROR_TRANSACTION_IS_DESTRUCTIVE, "Transaction is destructive.");
return -EEXIST;
}
}
/* 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 */
return r;
}
-int transaction_activate(Transaction *tr, Manager *m, JobMode mode, DBusError *e) {
+int transaction_activate(Transaction *tr, Manager *m, JobMode mode, sd_bus_error *e) {
Iterator i;
Job *j;
int r;
break;
if (r != -EAGAIN) {
- log_warning("Requested transaction contains an unfixable cyclic ordering dependency: %s", bus_error(e, r));
+ log_warning("Requested transaction contains an unfixable cyclic ordering dependency: %s", bus_error_message(e, r));
return r;
}
break;
if (r != -EAGAIN) {
- log_warning("Requested transaction contains unmergeable jobs: %s", bus_error(e, r));
+ log_warning("Requested transaction contains unmergeable jobs: %s", bus_error_message(e, r));
return r;
}
/* Ninth step: check whether we can actually apply this */
r = transaction_is_destructive(tr, mode, e);
if (r < 0) {
- log_notice("Requested transaction contradicts existing jobs: %s", bus_error(e, r));
+ log_notice("Requested transaction contradicts existing jobs: %s", bus_error_message(e, r));
return r;
}
j->override = override;
j->irreversible = tr->irreversible;
- LIST_PREPEND(Job, transaction, f, j);
+ LIST_PREPEND(transaction, f, j);
if (hashmap_replace(tr->jobs, unit, f) < 0) {
- LIST_REMOVE(Job, transaction, f, j);
+ LIST_REMOVE(transaction, f, j);
job_free(j);
return NULL;
}
bool conflicts,
bool ignore_requirements,
bool ignore_order,
- DBusError *e) {
+ sd_bus_error *e) {
Job *ret;
Iterator i;
Unit *dep;
unit->load_state != UNIT_ERROR &&
unit->load_state != UNIT_NOT_FOUND &&
unit->load_state != UNIT_MASKED) {
- dbus_set_error(e, BUS_ERROR_LOAD_FAILED, "Unit %s is not loaded properly.", unit->id);
+ sd_bus_error_setf(e, BUS_ERROR_LOAD_FAILED, "Unit %s is not loaded properly.", unit->id);
return -EINVAL;
}
if (type != JOB_STOP && unit->load_state == UNIT_ERROR) {
- dbus_set_error(e, BUS_ERROR_LOAD_FAILED,
+ sd_bus_error_setf(e, BUS_ERROR_LOAD_FAILED,
"Unit %s failed to load: %s. "
"See system logs and 'systemctl status %s' for details.",
unit->id,
}
if (type != JOB_STOP && unit->load_state == UNIT_NOT_FOUND) {
- dbus_set_error(e, BUS_ERROR_LOAD_FAILED,
+ sd_bus_error_setf(e, BUS_ERROR_LOAD_FAILED,
"Unit %s failed to load: %s.",
unit->id,
strerror(-unit->load_error));
}
if (type != JOB_STOP && unit->load_state == UNIT_MASKED) {
- dbus_set_error(e, BUS_ERROR_MASKED, "Unit %s is masked.", unit->id);
+ sd_bus_error_setf(e, BUS_ERROR_UNIT_MASKED, "Unit %s is masked.", unit->id);
return -EADDRNOTAVAIL;
}
if (!unit_job_is_applicable(unit, type)) {
- dbus_set_error(e, BUS_ERROR_JOB_TYPE_NOT_APPLICABLE, "Job type %s is not applicable for unit %s.", job_type_to_string(type), unit->id);
+ sd_bus_error_setf(e, BUS_ERROR_JOB_TYPE_NOT_APPLICABLE, "Job type %s is not applicable for unit %s.", job_type_to_string(type), unit->id);
return -EBADR;
}
if (r < 0) {
log_warning_unit(dep->id,
"Cannot add dependency job for unit %s, ignoring: %s",
- dep->id, bus_error(e, r));
+ dep->id, bus_error_message(e, r));
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
goto fail;
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
goto fail;
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
if (r < 0) {
log_full_unit(r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_WARNING, dep->id,
"Cannot add dependency job for unit %s, ignoring: %s",
- dep->id, bus_error(e, r));
+ dep->id, bus_error_message(e, r));
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
if (r < 0) {
log_full_unit(r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_WARNING, dep->id,
"Cannot add dependency job for unit %s, ignoring: %s",
- dep->id, bus_error(e, r));
+ dep->id, bus_error_message(e, r));
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
goto fail;
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
if (r < 0) {
log_full_unit(r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_WARNING, dep->id,
"Cannot add dependency job for unit %s, ignoring: %s",
- dep->id, bus_error(e, r));
+ dep->id, bus_error_message(e, r));
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
goto fail;
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
if (r < 0) {
log_warning_unit(dep->id,
"Cannot add dependency job for unit %s, ignoring: %s",
- dep->id, bus_error(e, r));
+ dep->id, bus_error_message(e, r));
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
goto fail;
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
goto fail;
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
goto fail;
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
if (r < 0) {
log_warning_unit(dep->id,
"Cannot add dependency reload job for unit %s, ignoring: %s",
- dep->id, bus_error(e, r));
+ dep->id, bus_error_message(e, r));
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
}