From: Zbigniew Jędrzejewski-Szmek Date: Wed, 9 May 2018 07:44:37 +0000 (+0200) Subject: sd-bus: add bus_freep and use _cleanup_ X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=48f921fceae614f617dfd12a2519ed25161f0672;p=elogind.git sd-bus: add bus_freep and use _cleanup_ --- diff --git a/src/libelogind/sd-bus/sd-bus.c b/src/libelogind/sd-bus/sd-bus.c index d1b50bbfa..218933196 100644 --- a/src/libelogind/sd-bus/sd-bus.c +++ b/src/libelogind/sd-bus/sd-bus.c @@ -166,7 +166,7 @@ static void bus_reset_queues(sd_bus *b) { b->wqueue_allocated = 0; } -static void bus_free(sd_bus *b) { +static sd_bus* bus_free(sd_bus *b) { sd_bus_slot *s; assert(b); @@ -231,9 +231,11 @@ static void bus_free(sd_bus *b) { assert_se(pthread_mutex_destroy(&b->memfd_cache_mutex) == 0); - free(b); + return mfree(b); } +DEFINE_TRIVIAL_CLEANUP_FUNC(sd_bus*, bus_free); + _public_ int sd_bus_new(sd_bus **ret) { _cleanup_free_ sd_bus *b = NULL; @@ -1205,7 +1207,7 @@ _public_ int sd_bus_start(sd_bus *bus) { _public_ int sd_bus_open_with_description(sd_bus **ret, const char *description) { const char *e; - sd_bus *b; + _cleanup_(bus_freep) sd_bus *b = NULL; int r; assert_return(ret, -EINVAL); @@ -1240,7 +1242,7 @@ _public_ int sd_bus_open_with_description(sd_bus **ret, const char *description) r = sd_bus_set_address(b, e); if (r < 0) - goto fail; + return r; b->bus_client = true; @@ -1252,14 +1254,10 @@ _public_ int sd_bus_open_with_description(sd_bus **ret, const char *description) r = sd_bus_start(b); if (r < 0) - goto fail; + return r; - *ret = b; + *ret = TAKE_PTR(b); return 0; - -fail: - bus_free(b); - return r; } _public_ int sd_bus_open(sd_bus **ret) { @@ -1278,7 +1276,7 @@ int bus_set_address_system(sd_bus *b) { } _public_ int sd_bus_open_system_with_description(sd_bus **ret, const char *description) { - sd_bus *b; + _cleanup_(bus_freep) sd_bus *b = NULL; int r; assert_return(ret, -EINVAL); @@ -1290,12 +1288,12 @@ _public_ int sd_bus_open_system_with_description(sd_bus **ret, const char *descr if (description) { r = sd_bus_set_description(b, description); if (r < 0) - goto fail; + return r; } r = bus_set_address_system(b); if (r < 0) - goto fail; + return r; b->bus_client = true; b->is_system = true; @@ -1308,14 +1306,10 @@ _public_ int sd_bus_open_system_with_description(sd_bus **ret, const char *descr r = sd_bus_start(b); if (r < 0) - goto fail; + return r; - *ret = b; + *ret = TAKE_PTR(b); return 0; - -fail: - bus_free(b); - return r; } _public_ int sd_bus_open_system(sd_bus **ret) { @@ -1352,7 +1346,7 @@ int bus_set_address_user(sd_bus *b) { _public_ int sd_bus_open_user_with_description(sd_bus **ret, const char *description) { #if 0 /// elogind does not support user buses - sd_bus *b; + _cleanup_(bus_freep) sd_bus *b = NULL; int r; assert_return(ret, -EINVAL); @@ -1364,12 +1358,12 @@ _public_ int sd_bus_open_user_with_description(sd_bus **ret, const char *descrip if (description) { r = sd_bus_set_description(b, description); if (r < 0) - goto fail; + return r; } r = bus_set_address_user(b); if (r < 0) - goto fail; + return r; b->bus_client = true; b->is_user = true; @@ -1381,14 +1375,10 @@ _public_ int sd_bus_open_user_with_description(sd_bus **ret, const char *descrip r = sd_bus_start(b); if (r < 0) - goto fail; + return r; - *ret = b; + *ret = TAKE_PTR(b); return 0; - -fail: - bus_free(b); - return r; } _public_ int sd_bus_open_user(sd_bus **ret) { @@ -1439,35 +1429,31 @@ int bus_set_address_system_remote(sd_bus *b, const char *host) { } _public_ int sd_bus_open_system_remote(sd_bus **ret, const char *host) { - sd_bus *bus; + _cleanup_(bus_freep) sd_bus *b = NULL; int r; assert_return(host, -EINVAL); assert_return(ret, -EINVAL); - r = sd_bus_new(&bus); + r = sd_bus_new(&b); if (r < 0) return r; - r = bus_set_address_system_remote(bus, host); + r = bus_set_address_system_remote(b, host); if (r < 0) - goto fail; + return r; - bus->bus_client = true; - bus->trusted = false; - bus->is_system = true; - bus->is_local = false; + b->bus_client = true; + b->trusted = false; + b->is_system = true; + b->is_local = false; - r = sd_bus_start(bus); + r = sd_bus_start(b); if (r < 0) - goto fail; + return r; - *ret = bus; + *ret = TAKE_PTR(b); return 0; - -fail: - bus_free(bus); - return r; } int bus_set_address_system_machine(sd_bus *b, const char *machine) { @@ -1489,40 +1475,35 @@ int bus_set_address_system_machine(sd_bus *b, const char *machine) { } _public_ int sd_bus_open_system_machine(sd_bus **ret, const char *machine) { - sd_bus *bus; + _cleanup_(bus_freep) sd_bus *b = NULL; int r; assert_return(machine, -EINVAL); assert_return(ret, -EINVAL); assert_return(machine_name_is_valid(machine), -EINVAL); - r = sd_bus_new(&bus); + r = sd_bus_new(&b); if (r < 0) return r; - r = bus_set_address_system_machine(bus, machine); + r = bus_set_address_system_machine(b, machine); if (r < 0) - goto fail; + return r; - bus->bus_client = true; - bus->trusted = false; - bus->is_system = true; - bus->is_local = false; + b->bus_client = true; + b->trusted = false; + b->is_system = true; + b->is_local = false; - r = sd_bus_start(bus); + r = sd_bus_start(b); if (r < 0) - goto fail; + return r; - *ret = bus; + *ret = TAKE_PTR(b); return 0; - -fail: - bus_free(bus); - return r; } _public_ void sd_bus_close(sd_bus *bus) { - if (!bus) return; if (bus->state == BUS_CLOSED) @@ -1546,7 +1527,6 @@ _public_ void sd_bus_close(sd_bus *bus) { } _public_ sd_bus* sd_bus_flush_close_unref(sd_bus *bus) { - if (!bus) return NULL; @@ -1569,7 +1549,6 @@ void bus_enter_closing(sd_bus *bus) { } _public_ sd_bus *sd_bus_ref(sd_bus *bus) { - if (!bus) return NULL; @@ -1588,12 +1567,10 @@ _public_ sd_bus *sd_bus_unref(sd_bus *bus) { if (i > 0) return NULL; - bus_free(bus); - return NULL; + return bus_free(bus); } _public_ int sd_bus_is_open(sd_bus *bus) { - assert_return(bus, -EINVAL); assert_return(bus = bus_resolve(bus), -ENOPKG); assert_return(!bus_pid_changed(bus), -ECHILD);