linux: (de)initialize d-bus at init and quit.
Previously we had different subsystems quitting it, in conflict, and risked multiple threads racing to init it at the same time. Fixes #3643.main
parent
57c2a4566f
commit
dbdbae44c5
11
src/SDL.c
11
src/SDL.c
|
@ -34,6 +34,9 @@
|
||||||
#include "thread/os2/SDL_systls_c.h"
|
#include "thread/os2/SDL_systls_c.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* this checks for HAVE_DBUS_DBUS_H internally. */
|
||||||
|
#include "core/linux/SDL_dbus.h"
|
||||||
|
|
||||||
#if defined(__EMSCRIPTEN__)
|
#if defined(__EMSCRIPTEN__)
|
||||||
#include <emscripten.h>
|
#include <emscripten.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -155,6 +158,10 @@ SDL_InitSubSystem(Uint32 flags)
|
||||||
/* Clear the error message */
|
/* Clear the error message */
|
||||||
SDL_ClearError();
|
SDL_ClearError();
|
||||||
|
|
||||||
|
#if SDL_USE_LIBDBUS
|
||||||
|
SDL_DBus_Init();
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((flags & SDL_INIT_GAMECONTROLLER)) {
|
if ((flags & SDL_INIT_GAMECONTROLLER)) {
|
||||||
/* game controller implies joystick */
|
/* game controller implies joystick */
|
||||||
flags |= SDL_INIT_JOYSTICK;
|
flags |= SDL_INIT_JOYSTICK;
|
||||||
|
@ -442,6 +449,10 @@ SDL_Quit(void)
|
||||||
SDL_AssertionsQuit();
|
SDL_AssertionsQuit();
|
||||||
SDL_LogResetPriorities();
|
SDL_LogResetPriorities();
|
||||||
|
|
||||||
|
#if SDL_USE_LIBDBUS
|
||||||
|
SDL_DBus_Quit();
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Now that every subsystem has been quit, we reset the subsystem refcount
|
/* Now that every subsystem has been quit, we reset the subsystem refcount
|
||||||
* and the list of initialized subsystems.
|
* and the list of initialized subsystems.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -575,12 +575,6 @@ Wayland_VideoQuit(_THIS)
|
||||||
|
|
||||||
Wayland_QuitKeyboard(_this);
|
Wayland_QuitKeyboard(_this);
|
||||||
|
|
||||||
/* !!! FIXME: other subsystems use D-Bus, so we shouldn't quit it here;
|
|
||||||
have SDL.c do this at a higher level, or add refcounting. */
|
|
||||||
#if SDL_USE_LIBDBUS
|
|
||||||
SDL_DBus_Quit();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
SDL_free(data->classname);
|
SDL_free(data->classname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -457,12 +457,6 @@ X11_VideoQuit(_THIS)
|
||||||
X11_QuitKeyboard(_this);
|
X11_QuitKeyboard(_this);
|
||||||
X11_QuitMouse(_this);
|
X11_QuitMouse(_this);
|
||||||
X11_QuitTouch(_this);
|
X11_QuitTouch(_this);
|
||||||
|
|
||||||
/* !!! FIXME: other subsystems use D-Bus, so we shouldn't quit it here;
|
|
||||||
have SDL.c do this at a higher level, or add refcounting. */
|
|
||||||
#if SDL_USE_LIBDBUS
|
|
||||||
SDL_DBus_Quit();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_bool
|
SDL_bool
|
||||||
|
|
Loading…
Reference in New Issue