-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;
-
- 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);
-
- /* Send to everybody */
- SET_FOREACH(b, j->manager->private_buses, i) {
- r = send_message(b, NULL, j);
- if (r < 0)
- return r;
- }
-
- if (j->manager->api_bus)
- return send_message(j->manager->api_bus, NULL, j);
-
- return 0;
-}
-
-static int send_new_signal(sd_bus *bus, const char *destination, Job *j) {