summaryrefslogtreecommitdiff
path: root/src/core/transaction.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-11-19 21:12:59 +0100
committerLennart Poettering <lennart@poettering.net>2013-11-20 20:52:36 +0100
commit718db96199eb307751264e4163555662c9a389fa (patch)
tree9ec8467596ba1acba76bb6273c7797baf68c1a00 /src/core/transaction.c
parent3febea3a0b0a968ea281e7959c1654cbaf95c9bf (diff)
core: convert PID 1 to libsystemd-bus
This patch converts PID 1 to libsystemd-bus and thus drops the dependency on libdbus. The only remaining code using libdbus is a test case that validates our bus marshalling against libdbus' marshalling, and this dependency can be turned off. This patch also adds a couple of things to libsystem-bus, that are necessary to make the port work: - Synthesizing of "Disconnected" messages when bus connections are severed. - Support for attaching multiple vtables for the same interface on the same path. This patch also fixes the SetDefaultTarget() and GetDefaultTarget() bus calls which used an inappropriate signature. As a side effect we will now generate PropertiesChanged messages which carry property contents, rather than just invalidation information.
Diffstat (limited to 'src/core/transaction.c')
-rw-r--r--src/core/transaction.c82
1 files changed, 42 insertions, 40 deletions
diff --git a/src/core/transaction.c b/src/core/transaction.c
index ba7d8d9828..e2ff0bd1e5 100644
--- a/src/core/transaction.c
+++ b/src/core/transaction.c
@@ -22,9 +22,10 @@
#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);
@@ -231,7 +232,7 @@ static int delete_one_unmergeable_job(Transaction *tr, Job *j) {
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;
@@ -261,8 +262,9 @@ static int transaction_merge_jobs(Transaction *tr, DBusError *e) {
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;
}
}
@@ -334,7 +336,7 @@ _pure_ static bool unit_matters_to_anchor(Unit *u, Job *j) {
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;
@@ -405,8 +407,8 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
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;
}
@@ -445,7 +447,7 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
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;
@@ -490,7 +492,7 @@ rescan:
}
}
-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;
@@ -508,7 +510,7 @@ static int transaction_is_destructive(Transaction *tr, JobMode mode, DBusError *
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;
}
}
@@ -635,7 +637,7 @@ rollback:
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;
@@ -677,7 +679,7 @@ int transaction_activate(Transaction *tr, Manager *m, JobMode mode, DBusError *e
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;
}
@@ -694,7 +696,7 @@ int transaction_activate(Transaction *tr, Manager *m, JobMode mode, DBusError *e
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;
}
@@ -713,7 +715,7 @@ int transaction_activate(Transaction *tr, Manager *m, JobMode mode, DBusError *e
/* 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;
}
@@ -835,7 +837,7 @@ int transaction_add_job_and_dependencies(
bool conflicts,
bool ignore_requirements,
bool ignore_order,
- DBusError *e) {
+ sd_bus_error *e) {
Job *ret;
Iterator i;
Unit *dep;
@@ -856,12 +858,12 @@ int transaction_add_job_and_dependencies(
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,
@@ -871,7 +873,7 @@ int transaction_add_job_and_dependencies(
}
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));
@@ -879,12 +881,12 @@ int transaction_add_job_and_dependencies(
}
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;
}
@@ -916,10 +918,10 @@ int transaction_add_job_and_dependencies(
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);
}
}
@@ -935,7 +937,7 @@ int transaction_add_job_and_dependencies(
goto fail;
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
@@ -946,7 +948,7 @@ int transaction_add_job_and_dependencies(
goto fail;
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
@@ -955,10 +957,10 @@ int transaction_add_job_and_dependencies(
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);
}
}
@@ -967,10 +969,10 @@ int transaction_add_job_and_dependencies(
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);
}
}
@@ -981,7 +983,7 @@ int transaction_add_job_and_dependencies(
goto fail;
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
@@ -990,10 +992,10 @@ int transaction_add_job_and_dependencies(
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);
}
}
@@ -1004,7 +1006,7 @@ int transaction_add_job_and_dependencies(
goto fail;
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
@@ -1013,10 +1015,10 @@ int transaction_add_job_and_dependencies(
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);
}
}
@@ -1031,7 +1033,7 @@ int transaction_add_job_and_dependencies(
goto fail;
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
@@ -1042,7 +1044,7 @@ int transaction_add_job_and_dependencies(
goto fail;
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
@@ -1053,7 +1055,7 @@ int transaction_add_job_and_dependencies(
goto fail;
if (e)
- dbus_error_free(e);
+ sd_bus_error_free(e);
}
}
@@ -1066,10 +1068,10 @@ int transaction_add_job_and_dependencies(
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);
}
}
}