X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd%2Fsd-bus%2Fsd-bus.c;h=549f9e09433c7bf87ceb2d83ac908b5c78760671;hb=a2243d548830d2aff6b768a0b47a0f0a513012a5;hp=78e91b96541809ef35e13d0b5edf0ac55ab8c890;hpb=9021bb9f935c93b516b10c88db2a212a9e3a8140;p=elogind.git diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c index 78e91b965..549f9e094 100644 --- a/src/libsystemd/sd-bus/sd-bus.c +++ b/src/libsystemd/sd-bus/sd-bus.c @@ -142,6 +142,7 @@ static void bus_free(sd_bus *b) { hashmap_free_free(b->reply_callbacks); prioq_free(b->reply_callbacks_prioq); + assert(b->match_callbacks.type == BUS_MATCH_ROOT); bus_match_free(&b->match_callbacks); hashmap_free_free(b->vtable_methods); @@ -349,8 +350,6 @@ static int hello_callback(sd_bus *bus, sd_bus_message *reply, void *userdata, sd assert(reply); r = sd_bus_message_get_errno(reply); - if (r < 0) - return r; if (r > 0) return -r; @@ -1164,7 +1163,11 @@ int bus_set_address_user(sd_bus *b) { #endif } else { #ifdef ENABLE_KDBUS - asprintf(&b->address, KERNEL_USER_BUS_FMT, getuid()); + int r; + + r = asprintf(&b->address, KERNEL_USER_BUS_FMT, getuid()); + if (r < 0) + return -ENOMEM; #else return -ECONNREFUSED; #endif @@ -1756,7 +1759,7 @@ _public_ int sd_bus_call_async( if (!BUS_IS_OPEN(bus->state)) return -ENOTCONN; - r = hashmap_ensure_allocated(&bus->reply_callbacks, uint64_hash_func, uint64_compare_func); + r = hashmap_ensure_allocated(&bus->reply_callbacks, &uint64_hash_ops); if (r < 0) return r; @@ -3339,8 +3342,10 @@ _public_ int sd_bus_get_peer_creds(sd_bus *bus, uint64_t mask, sd_bus_creds **re } r = bus_creds_add_more(c, mask, pid, 0); - if (r < 0) + if (r < 0) { + sd_bus_creds_unref(c); return r; + } *ret = c; return 0;