chiark / gitweb /
bus: conditionally set cookie_reply/timeout and update kdbus.h
[elogind.git] / src / libsystemd-bus / sd-bus.c
index a39495541b64bf9327a848e5018216c007e37d9e..9b93ff7e1bafc6a82c6ce18ab134801aaef15ffa 100644 (file)
@@ -141,6 +141,8 @@ static void bus_free(sd_bus *b) {
         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);
@@ -374,7 +376,7 @@ static int bus_send_hello(sd_bus *bus) {
         r = sd_bus_message_new_method_call(
                         bus,
                         "org.freedesktop.DBus",
-                        "/",
+                        "/org/freedesktop/DBus",
                         "org.freedesktop.DBus",
                         "Hello",
                         &m);
@@ -1360,14 +1362,33 @@ int bus_seal_synthetic_message(sd_bus *b, sd_bus_message *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) {
@@ -2101,11 +2122,16 @@ static int process_message(sd_bus *bus, sd_bus_message *m) {
         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)
@@ -2171,6 +2197,12 @@ static int process_running(sd_bus *bus, sd_bus_message **ret) {
 
         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,
@@ -2965,6 +2997,12 @@ _public_ int sd_bus_try_close(sd_bus *bus) {
         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;