From: Sven Eden Date: Tue, 19 Jun 2018 21:32:59 +0000 (+0200) Subject: Fix accidental dbus closing in update_utmp() (#50) X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=4f703de664738f58bc92834f2cd75234254eb07f;p=elogind.git Fix accidental dbus closing in update_utmp() (#50) When updating utmp on reboot and poweroff, the managers dbus connection was copied and then closed and invalidated. As the utmp update in elogind does not need a dbus connection at all, the copying and the closing was removed. This fixes elogind to become unresponsive when calling for poweroff, halt or reboot. Closes: #50 --- diff --git a/src/update-utmp/update-utmp.c b/src/update-utmp/update-utmp.c index 0111dc6a0..2bd55a33c 100644 --- a/src/update-utmp/update-utmp.c +++ b/src/update-utmp/update-utmp.c @@ -237,7 +237,7 @@ static int on_runlevel(Context *c) { #if 0 /// elogind needs this to be a callable function int main(int argc, char *argv[]) { #else -void update_utmp(int argc, char* argv[], sd_bus *bus) { +void update_utmp(int argc, char* argv[]) { #endif // 0 Context c = { #if HAVE_AUDIT @@ -265,7 +265,6 @@ void update_utmp(int argc, char* argv[], sd_bus *bus) { #else assert(2 == argc); assert(argv[1]); - assert(bus); #endif // 0 #if HAVE_AUDIT @@ -300,7 +299,6 @@ void update_utmp(int argc, char* argv[], sd_bus *bus) { finish: #else - c.bus = bus; if (streq(argv[1], "reboot")) (void)on_reboot(&c); else if (streq(argv[1], "shutdown")) @@ -311,8 +309,9 @@ finish: audit_close(c.audit_fd); #endif - sd_bus_flush_close_unref(c.bus); #if 0 /// UNNEEDED by elogind + sd_bus_flush_close_unref(c.bus); + return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; #endif // 0 } diff --git a/src/update-utmp/update-utmp.h b/src/update-utmp/update-utmp.h index 7d7d43101..97b046e7e 100644 --- a/src/update-utmp/update-utmp.h +++ b/src/update-utmp/update-utmp.h @@ -6,7 +6,7 @@ * Make the old main() from update-utmp.c visible as update_utmp() * ******************************************************************/ -void update_utmp(int argc, char* argv[], sd_bus *bus); +void update_utmp(int argc, char* argv[]); #endif // ELOGIND_SRC_UPDATE_UTMP_UPDATE_UTMP_H_INCLUDED