chiark / gitweb /
sd-bus: allow description to be set for system/user busses (#8594)
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 29 Mar 2018 14:14:11 +0000 (16:14 +0200)
committerSven Eden <yamakuzure@gmx.net>
Fri, 24 Aug 2018 14:47:08 +0000 (16:47 +0200)
sd_bus_open/sd_bus_open_system/sd_bus_open_user are convenient, but
don't allow the description to be set. After they return, the bus is
is already started, and sd_bus_set_description() fails with -EBUSY.
It would be possible to allow sd_bus_set_description() to update the
description "live", but messages are already emitted from sd_bus_open
functions, so it's better to allow the description to be set in
sd_bus_open/sd_bus_open_system/sd_bus_open_user.

Fixes message like:
Bus n/a: changing state UNSET → OPENING

src/libelogind/sd-bus/sd-bus.c

index 71a96ac006bd05b467250c19b930dd57589e3933..c5013f98c293652b4a7e02ba4839b18710ce1e10 100644 (file)
@@ -527,7 +527,8 @@ static int synthesize_connected_signal(sd_bus *bus) {
 
         /* Insert at the very front */
         memmove(bus->rqueue + 1, bus->rqueue, sizeof(sd_bus_message*) * bus->rqueue_size);
-        bus->rqueue[0] = TAKE_PTR(m);
+        bus->rqueue[0] = m;
+        m = NULL;
         bus->rqueue_size++;
 
         return 0;
@@ -2787,8 +2788,8 @@ static int process_running(sd_bus *bus, bool hint_priority, int64_t priority, sd
                 if (r < 0)
                         return r;
 
-                *ret = TAKE_PTR(m);
-
+                *ret = m;
+                m = NULL;
                 return 1;
         }
 
@@ -2947,8 +2948,10 @@ static int process_closing(sd_bus *bus, sd_bus_message **ret) {
         bus->exit_triggered = true;
         (void) bus_exit_now(bus);
 
-        if (ret)
-                *ret = TAKE_PTR(m);
+        if (ret) {
+                *ret = m;
+                m = NULL;
+        }
 
         r = 1;