bus: wrap KDBUS_CMD_BYEBYE with a high-level call sd_bus_try_close()
This commit is contained in:
parent
5a884f93fd
commit
ae095f8605
|
@ -1266,3 +1266,13 @@ int bus_kernel_create_monitor(const char *bus) {
|
||||||
|
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int bus_kernel_try_close(sd_bus *bus) {
|
||||||
|
assert(bus);
|
||||||
|
assert(bus->is_kernel);
|
||||||
|
|
||||||
|
if (ioctl(bus->input_fd, KDBUS_CMD_BYEBYE) < 0)
|
||||||
|
return -errno;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -75,3 +75,5 @@ int bus_kernel_parse_unique_name(const char *s, uint64_t *id);
|
||||||
|
|
||||||
int kdbus_translate_request_name_flags(uint64_t sd_bus_flags, uint64_t *kdbus_flags);
|
int kdbus_translate_request_name_flags(uint64_t sd_bus_flags, uint64_t *kdbus_flags);
|
||||||
int kdbus_translate_attach_flags(uint64_t sd_bus_flags, uint64_t *kdbus_flags);
|
int kdbus_translate_attach_flags(uint64_t sd_bus_flags, uint64_t *kdbus_flags);
|
||||||
|
|
||||||
|
int bus_kernel_try_close(sd_bus *bus);
|
||||||
|
|
|
@ -31,6 +31,7 @@ global:
|
||||||
sd_bus_negotiate_attach_creds;
|
sd_bus_negotiate_attach_creds;
|
||||||
sd_bus_start;
|
sd_bus_start;
|
||||||
sd_bus_close;
|
sd_bus_close;
|
||||||
|
sd_bus_try_close;
|
||||||
sd_bus_ref;
|
sd_bus_ref;
|
||||||
sd_bus_unref;
|
sd_bus_unref;
|
||||||
sd_bus_is_open;
|
sd_bus_is_open;
|
||||||
|
|
|
@ -2956,3 +2956,19 @@ _public_ int sd_bus_get_peer_creds(sd_bus *bus, uint64_t mask, sd_bus_creds **re
|
||||||
*ret = c;
|
*ret = c;
|
||||||
return 0;
|
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);
|
||||||
|
|
||||||
|
r = bus_kernel_try_close(bus);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
sd_bus_close(bus);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -95,6 +95,9 @@ int main(int argc, char *argv[]) {
|
||||||
r = sd_bus_emit_signal(a, "/foo/bar/waldo", "waldo.com", "Piep", "sss", "I am a string", "/this/is/a/path", "and.this.a.domain.name");
|
r = sd_bus_emit_signal(a, "/foo/bar/waldo", "waldo.com", "Piep", "sss", "I am a string", "/this/is/a/path", "and.this.a.domain.name");
|
||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
|
r = sd_bus_try_close(b);
|
||||||
|
assert_se(r == -EBUSY);
|
||||||
|
|
||||||
r = sd_bus_process(b, &m);
|
r = sd_bus_process(b, &m);
|
||||||
assert_se(r > 0);
|
assert_se(r > 0);
|
||||||
assert_se(m);
|
assert_se(m);
|
||||||
|
@ -160,6 +163,9 @@ int main(int argc, char *argv[]) {
|
||||||
r = sd_bus_release_name(a, "net.x0pointer.foobar");
|
r = sd_bus_release_name(a, "net.x0pointer.foobar");
|
||||||
assert_se(r == -ESRCH);
|
assert_se(r == -ESRCH);
|
||||||
|
|
||||||
|
r = sd_bus_try_close(a);
|
||||||
|
assert_se(r >= 0);
|
||||||
|
|
||||||
sd_bus_unref(a);
|
sd_bus_unref(a);
|
||||||
sd_bus_unref(b);
|
sd_bus_unref(b);
|
||||||
|
|
||||||
|
|
|
@ -115,6 +115,7 @@ int sd_bus_negotiate_attach_timestamp(sd_bus *bus, int b);
|
||||||
int sd_bus_negotiate_attach_creds(sd_bus *bus, uint64_t creds_mask);
|
int sd_bus_negotiate_attach_creds(sd_bus *bus, uint64_t creds_mask);
|
||||||
int sd_bus_start(sd_bus *ret);
|
int sd_bus_start(sd_bus *ret);
|
||||||
|
|
||||||
|
int sd_bus_try_close(sd_bus *bus);
|
||||||
void sd_bus_close(sd_bus *bus);
|
void sd_bus_close(sd_bus *bus);
|
||||||
|
|
||||||
sd_bus *sd_bus_ref(sd_bus *bus);
|
sd_bus *sd_bus_ref(sd_bus *bus);
|
||||||
|
|
Loading…
Reference in New Issue