chiark / gitweb /
bus: fix assert() on HELLO error-path
authorDavid Herrmann <dh.herrmann@gmail.com>
Fri, 12 Dec 2014 13:02:05 +0000 (14:02 +0100)
committerDavid Herrmann <dh.herrmann@gmail.com>
Fri, 12 Dec 2014 13:02:05 +0000 (14:02 +0100)
Make sure we don't call into any bus_kernel_*() functions before
b->is_kernel is set to true. Hard-code the CMD_FREE just like the other
helpers do.

src/libsystemd/sd-bus/bus-kernel.c

index 112292735b4018a6ad9f92b9d35c3a9ab3e21894..d910d8e492e59140a69b0cc020b5355c7d1bd97a 100644 (file)
@@ -815,6 +815,10 @@ fail:
 }
 
 int bus_kernel_take_fd(sd_bus *b) {
 }
 
 int bus_kernel_take_fd(sd_bus *b) {
+        struct kdbus_cmd_free cmd_free = {
+                .size = sizeof(cmd_free),
+                .flags = 0,
+        };
         struct kdbus_bloom_parameter *bloom = NULL;
         struct kdbus_cmd_hello *hello;
         struct kdbus_item_list *items;
         struct kdbus_bloom_parameter *bloom = NULL;
         struct kdbus_cmd_hello *hello;
         struct kdbus_item_list *items;
@@ -982,7 +986,8 @@ int bus_kernel_take_fd(sd_bus *b) {
         return bus_start_running(b);
 
 fail:
         return bus_start_running(b);
 
 fail:
-        (void) bus_kernel_cmd_free(b, hello->offset);
+        cmd_free.offset = hello->offset;
+        (void) ioctl(b->input_fd, KDBUS_CMD_FREE, &cmd_free);
         return r;
 }
 
         return r;
 }