X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-bus%2Fsd-bus.c;h=6e4406857326e3f66dc3693817b4a3def0e771be;hb=bd746b8b0ce91be3f28532d319ffa577590f52d8;hp=338ce0619d0016720e4bd5d66891c8790d626a9c;hpb=e1c433c6218b3e3bcc2621bdfa575a77017bb9ae;p=elogind.git diff --git a/src/libsystemd-bus/sd-bus.c b/src/libsystemd-bus/sd-bus.c index 338ce0619..6e4406857 100644 --- a/src/libsystemd-bus/sd-bus.c +++ b/src/libsystemd-bus/sd-bus.c @@ -2813,13 +2813,13 @@ static int bus_default(int (*bus_open)(sd_bus **), sd_bus **default_bus, sd_bus } _public_ int sd_bus_default_system(sd_bus **ret) { - static __thread sd_bus *default_system_bus = NULL; + static thread_local sd_bus *default_system_bus = NULL; return bus_default(sd_bus_open_system, &default_system_bus, ret); } _public_ int sd_bus_default_user(sd_bus **ret) { - static __thread sd_bus *default_user_bus = NULL; + static thread_local sd_bus *default_user_bus = NULL; return bus_default(sd_bus_open_user, &default_user_bus, ret); } @@ -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; +}