chiark / gitweb /
Fix accidental dbus closing in update_utmp() (#50)
authorSven Eden <yamakuzure@gmx.net>
Tue, 19 Jun 2018 21:32:59 +0000 (23:32 +0200)
committerSven Eden <yamakuzure@gmx.net>
Fri, 29 Jun 2018 05:12:51 +0000 (07:12 +0200)
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
src/update-utmp/update-utmp.c
src/update-utmp/update-utmp.h

index 0111dc6a0b2c82c528b9449ef9b7637ef69bdb4a..2bd55a33cc9987789bf3e5f46b526cbf96441def 100644 (file)
@@ -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
 }
index 7d7d4310147cffeada9aa7c4bbe1590fba5c5d5b..97b046e7e9795acf262bee7baf5658b8540e1e37 100644 (file)
@@ -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