From 714085d327dc1f2e12b4b7315c9e70886d68a251 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 13 Feb 2018 08:07:52 -0800 Subject: [PATCH] Fixed bug 3950 - Don't always call dbus_shutdown in SDL_DBus Alexander Larsson dbus_shutdown() is a debug feature which closes all global resources in the dbus library. Calling this should be done by the app, not a library, because if there are multiple users of dbus in the process then SDL could shut it down even though another part is using it. For example, i had an issue with this in mGBA, which uses both Qt and SDL, both using libdbus. I had a session bus, but no system bus (this was in a flatpak sandbox), and when SDL_DBus_Init() failed to init the system bus it called dbus_shudown() and continued on. This caused issues for Qt when running due to its session bus connections having disappeared beneath it. --- src/core/linux/SDL_dbus.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/linux/SDL_dbus.c b/src/core/linux/SDL_dbus.c index 8f3462fc25276..713b94e1ee294 100644 --- a/src/core/linux/SDL_dbus.c +++ b/src/core/linux/SDL_dbus.c @@ -139,9 +139,14 @@ SDL_DBus_Quit(void) dbus.connection_close(dbus.session_conn); dbus.connection_unref(dbus.session_conn); } +/* Don't do this - bug 3950 + dbus_shutdown() is a debug feature which closes all global resources in the dbus library. Calling this should be done by the app, not a library, because if there are multiple users of dbus in the process then SDL could shut it down even though another part is using it. +*/ +#if 0 if (dbus.shutdown) { dbus.shutdown(); } +#endif SDL_zero(dbus); UnloadDBUSLibrary(); }