free(b->address);
free(b->kernel);
free(b->machine);
+ free(b->fake_label);
+ free(b->cgroup_root);
free(b->exec_path);
strv_free(b->exec_argv);
r = sd_bus_message_new_method_call(
bus,
"org.freedesktop.DBus",
- "/",
+ "/org/freedesktop/DBus",
"org.freedesktop.DBus",
"Hello",
&m);
return bus_message_seal(m, 0xFFFFFFFFULL, 0);
}
-static int bus_write_message(sd_bus *bus, sd_bus_message *message, size_t *idx) {
+static int bus_write_message(sd_bus *bus, sd_bus_message *m, size_t *idx) {
+ int r;
+
assert(bus);
- assert(message);
+ assert(m);
if (bus->is_kernel)
- return bus_kernel_write_message(bus, message);
+ r = bus_kernel_write_message(bus, m);
else
- return bus_socket_write_message(bus, message, idx);
+ r = bus_socket_write_message(bus, m, idx);
+
+ if (r <= 0)
+ return r;
+
+ if (bus->is_kernel || bus->windex >= BUS_MESSAGE_SIZE(m))
+ log_debug("Sent message type=%s sender=%s destination=%s object=%s interface=%s member=%s serial=%lu reply_serial=%lu error=%s",
+ bus_message_type_to_string(m->header->type),
+ strna(sd_bus_message_get_sender(m)),
+ strna(sd_bus_message_get_destination(m)),
+ strna(sd_bus_message_get_path(m)),
+ strna(sd_bus_message_get_interface(m)),
+ strna(sd_bus_message_get_member(m)),
+ (unsigned long) m->header->serial,
+ (unsigned long) m->reply_serial,
+ strna(m->error.message));
+
+ return r;
}
static int dispatch_wqueue(sd_bus *bus) {
bus->current = m;
bus->iteration_counter++;
- log_debug("Got message sender=%s object=%s interface=%s member=%s",
+ log_debug("Got message type=%s sender=%s destination=%s object=%s interface=%s member=%s serial=%lu reply_serial=%lu error=%s",
+ bus_message_type_to_string(m->header->type),
strna(sd_bus_message_get_sender(m)),
+ strna(sd_bus_message_get_destination(m)),
strna(sd_bus_message_get_path(m)),
strna(sd_bus_message_get_interface(m)),
- strna(sd_bus_message_get_member(m)));
+ strna(sd_bus_message_get_member(m)),
+ (unsigned long) m->header->serial,
+ (unsigned long) m->reply_serial,
+ strna(m->error.message));
r = process_hello(bus, m);
if (r != 0)
if (m->header->type == SD_BUS_MESSAGE_METHOD_CALL) {
+ log_debug("Unprocessed message call sender=%s object=%s interface=%s member=%s",
+ strna(sd_bus_message_get_sender(m)),
+ strna(sd_bus_message_get_path(m)),
+ strna(sd_bus_message_get_interface(m)),
+ strna(sd_bus_message_get_member(m)));
+
r = sd_bus_reply_method_errorf(
m,
SD_BUS_ERROR_UNKNOWN_OBJECT,
}
_public_ int sd_bus_default_system(sd_bus **ret) {
- static __thread sd_bus *default_system_bus = NULL;
+ static thread_local sd_bus *default_system_bus = NULL;
return bus_default(sd_bus_open_system, &default_system_bus, ret);
}
_public_ int sd_bus_default_user(sd_bus **ret) {
- static __thread sd_bus *default_user_bus = NULL;
+ static thread_local sd_bus *default_user_bus = NULL;
return bus_default(sd_bus_open_user, &default_user_bus, ret);
}
*ret = c;
return 0;
}
+
+_public_ int sd_bus_try_close(sd_bus *bus) {
+ int r;
+
+ assert_return(bus, -EINVAL);
+ assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
+ assert_return(!bus_pid_changed(bus), -ECHILD);
+ assert_return(bus->is_kernel, -ENOTSUP);
+
+ if (bus->rqueue_size > 0)
+ return -EBUSY;
+
+ if (bus->wqueue_size > 0)
+ return -EBUSY;
+
+ r = bus_kernel_try_close(bus);
+ if (r < 0)
+ return r;
+
+ sd_bus_close(bus);
+ return 0;
+}