summaryrefslogtreecommitdiff
path: root/src/core/dbus-job.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/dbus-job.c')
-rw-r--r--src/core/dbus-job.c64
1 files changed, 11 insertions, 53 deletions
diff --git a/src/core/dbus-job.c b/src/core/dbus-job.c
index a8eae4734e..5c364a4264 100644
--- a/src/core/dbus-job.c
+++ b/src/core/dbus-job.c
@@ -24,7 +24,7 @@
#include "selinux-access.h"
#include "job.h"
#include "dbus-job.h"
-#include "dbus-client-track.h"
+#include "dbus.h"
static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_type, job_type, JobType);
static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_state, job_state, JobState);
@@ -79,53 +79,10 @@ const sd_bus_vtable bus_job_vtable[] = {
SD_BUS_VTABLE_END
};
-static int foreach_client(Job *j, int (*send_message)(sd_bus *bus, const char *name, Job *j)) {
- BusTrackedClient *one_destination = NULL;
- Iterator i;
- sd_bus *b;
- unsigned n, m;
- int r, ret;
-
- assert(j);
- assert(send_message);
-
- n = set_size(j->manager->subscribed);
- m = set_size(j->subscribed);
-
- if (n <= 0 && m <= 0)
- return 0;
-
- if (n == 1 && m == 0)
- one_destination = set_first(j->manager->subscribed);
- else if (n == 0 && m == 1)
- one_destination = set_first(j->subscribed);
- else
- one_destination = NULL;
-
- if (one_destination)
- return send_message(one_destination->bus, isempty(one_destination->name) ? NULL : one_destination->name, j);
-
- ret = 0;
-
- /* Send to everybody */
- SET_FOREACH(b, j->manager->private_buses, i) {
- r = send_message(b, NULL, j);
- if (r < 0)
- ret = r;
- }
-
- if (j->manager->api_bus) {
- r = send_message(j->manager->api_bus, NULL, j);
- if (r < 0)
- ret = r;
- }
-
- return ret;
-}
-
-static int send_new_signal(sd_bus *bus, const char *destination, Job *j) {
+static int send_new_signal(sd_bus *bus, void *userdata) {
_cleanup_bus_message_unref_ sd_bus_message *m = NULL;
_cleanup_free_ char *p = NULL;
+ Job *j = userdata;
int r;
assert(bus);
@@ -148,11 +105,12 @@ static int send_new_signal(sd_bus *bus, const char *destination, Job *j) {
if (r < 0)
return r;
- return sd_bus_send_to(bus, m, destination, NULL);
+ return sd_bus_send(bus, m, NULL);
}
-static int send_changed_signal(sd_bus *bus, const char *destination, Job *j) {
+static int send_changed_signal(sd_bus *bus, void *userdata) {
_cleanup_free_ char *p = NULL;
+ Job *j = userdata;
assert(bus);
assert(j);
@@ -174,16 +132,17 @@ void bus_job_send_change_signal(Job *j) {
j->in_dbus_queue = false;
}
- r = foreach_client(j, j->sent_dbus_new_signal ? send_changed_signal : send_new_signal);
+ r = bus_foreach_bus(j->manager, j->subscribed, j->sent_dbus_new_signal ? send_changed_signal : send_new_signal, j);
if (r < 0)
log_debug("Failed to send job change signal for %u: %s", j->id, strerror(-r));
j->sent_dbus_new_signal = true;
}
-static int send_removed_signal(sd_bus *bus, const char *destination, Job *j) {
+static int send_removed_signal(sd_bus *bus, void *userdata) {
_cleanup_bus_message_unref_ sd_bus_message *m = NULL;
_cleanup_free_ char *p = NULL;
+ Job *j = userdata;
int r;
assert(bus);
@@ -193,7 +152,6 @@ static int send_removed_signal(sd_bus *bus, const char *destination, Job *j) {
if (!p)
return -ENOMEM;
-
r = sd_bus_message_new_signal(
bus,
&m,
@@ -207,7 +165,7 @@ static int send_removed_signal(sd_bus *bus, const char *destination, Job *j) {
if (r < 0)
return r;
- return sd_bus_send_to(bus, m, destination, NULL);
+ return sd_bus_send(bus, m, NULL);
}
void bus_job_send_removed_signal(Job *j) {
@@ -218,7 +176,7 @@ void bus_job_send_removed_signal(Job *j) {
if (!j->sent_dbus_new_signal)
bus_job_send_change_signal(j);
- r = foreach_client(j, send_removed_signal);
+ r = bus_foreach_bus(j->manager, j->subscribed, send_removed_signal, j);
if (r < 0)
log_debug("Failed to send job remove signal for %u: %s", j->id, strerror(-r));
}