From 8ce2afd6347dcf01e33fe1ff257e2b0fffa8edfe Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 14 Oct 2013 19:53:56 +0200 Subject: bus: make sure that we always keep a ref to the bus when we dispatch callbacks Otherwise the callback might unref the bus we are processing and destroy the object while we are processing it. --- src/libsystemd-bus/bus-internal.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/libsystemd-bus/bus-internal.h') diff --git a/src/libsystemd-bus/bus-internal.h b/src/libsystemd-bus/bus-internal.h index 6499d6b013..31e10b2c27 100644 --- a/src/libsystemd-bus/bus-internal.h +++ b/src/libsystemd-bus/bus-internal.h @@ -294,3 +294,9 @@ bool bus_pid_changed(sd_bus *bus); for (char *_slash = ({ strcpy((prefix), (path)); streq((prefix), "/") ? NULL : strrchr((prefix), '/'); }) ; \ _slash && !(_slash[(_slash) == (prefix)] = 0); \ _slash = streq((prefix), "/") ? NULL : strrchr((prefix), '/')) + +/* If we are invoking callbacks of a bus object, ensure unreffing the + * bus from the callback doesn't destroy the object we are working + * on */ +#define BUS_DONT_DESTROY(bus) \ + _cleanup_bus_unref_ sd_bus *_dont_destroy_##bus = sd_bus_ref(bus) -- cgit v1.2.3-54-g00ecf