chiark / gitweb /
bus: don't generate NameAcquired/NameLost messages in the library
[elogind.git] / src / libsystemd-bus / bus-kernel.c
index 54e85c94439f2fbec5415e797aa4f8db574b9b0d..a8579c98fa80fa67b8ef532d9448db118f7e5d66 100644 (file)
@@ -356,6 +356,8 @@ int bus_kernel_take_fd(sd_bus *b) {
         if (asprintf(&b->unique_name, ":1.%llu", (unsigned long long) hello.id) < 0)
                 return -ENOMEM;
 
+        b->unique_id = hello.id;
+
         b->is_kernel = true;
         b->bus_client = true;
         b->can_fds = !!(hello.conn_flags & KDBUS_HELLO_ACCEPT_FD);
@@ -363,11 +365,7 @@ int bus_kernel_take_fd(sd_bus *b) {
         /* the kernel told us the UUID of the underlying bus */
         memcpy(b->server_id.bytes, hello.id128, sizeof(b->server_id.bytes));
 
-        r = bus_start_running(b);
-        if (r < 0)
-                return r;
-
-        return 1;
+        return bus_start_running(b);
 }
 
 int bus_kernel_connect(sd_bus *b) {
@@ -446,15 +444,13 @@ static int push_name_owner_changed(sd_bus *bus, const char *name, const char *ol
 
         m->sender = "org.freedesktop.DBus";
 
-        r = bus_seal_message(bus, m);
-        if (r < 0)
-                return r;
-
-        r = bus_rqueue_push(bus, m);
+        r = bus_seal_synthetic_message(bus, m);
         if (r < 0)
                 return r;
 
+        bus->rqueue[bus->rqueue_size++] = m;
         m = NULL;
+
         return 1;
 }
 
@@ -516,15 +512,13 @@ static int translate_reply(sd_bus *bus, struct kdbus_msg *k, struct kdbus_item *
 
         m->sender = "org.freedesktop.DBus";
 
-        r = bus_seal_message(bus, m);
-        if (r < 0)
-                return r;
-
-        r = bus_rqueue_push(bus, m);
+        r = bus_seal_synthetic_message(bus, m);
         if (r < 0)
                 return r;
 
+        bus->rqueue[bus->rqueue_size++] = m;
         m = NULL;
+
         return 1;
 }
 
@@ -561,7 +555,7 @@ static int bus_kernel_translate_message(sd_bus *bus, struct kdbus_msg *k) {
                 return 0;
         }
 
-        return translate[found->type](bus, k, d);
+        return translate[found->type - _KDBUS_ITEM_KERNEL_BASE](bus, k, found);
 }
 
 int kdbus_translate_attach_flags(uint64_t mask, uint64_t *kdbus_mask) {
@@ -827,12 +821,9 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k) {
         m->kdbus = k;
         m->release_kdbus = true;
         m->free_fds = true;
-
         fds = NULL;
 
-        r = bus_rqueue_push(bus, m);
-        if (r < 0)
-                goto fail;
+        bus->rqueue[bus->rqueue_size++] = m;
 
         return 1;
 
@@ -859,12 +850,7 @@ int bus_kernel_read_message(sd_bus *bus) {
 
         assert(bus);
 
-        /* Kernel messages might result in 2 new queued messages in
-         * the worst case (NameOwnerChange and LostName for the same
-         * well-known name, for example). Let's make room in
-         * advance. */
-
-        r = bus_rqueue_make_room(bus, 2);
+        r = bus_rqueue_make_room(bus);
         if (r < 0)
                 return r;