chiark / gitweb /
bus: in sd_bus_try_close() consider local read queue too
[elogind.git] / src / libsystemd-bus / sd-bus.c
index 9c564de76403b9c928b95e504374df9f062f738d..6e4406857326e3f66dc3693817b4a3def0e771be 100644 (file)
@@ -2956,3 +2956,22 @@ _public_ int sd_bus_get_peer_creds(sd_bus *bus, uint64_t mask, sd_bus_creds **re
         *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;
+
+        r = bus_kernel_try_close(bus);
+        if (r < 0)
+                return r;
+
+        sd_bus_close(bus);
+        return 0;
+}