|
@@ -114,6 +114,7 @@ static SDL_bool SDL_MainIsReady = SDL_FALSE;
|
|
|
#else
|
|
|
static SDL_bool SDL_MainIsReady = SDL_TRUE;
|
|
|
#endif
|
|
|
+static SDL_bool SDL_main_thread_initialized = SDL_FALSE;
|
|
|
static SDL_bool SDL_bInMainQuit = SDL_FALSE;
|
|
|
static Uint8 SDL_SubsystemRefCount[32];
|
|
|
|
|
@@ -179,6 +180,36 @@ void SDL_SetMainReady(void)
|
|
|
SDL_MainIsReady = SDL_TRUE;
|
|
|
}
|
|
|
|
|
|
+void SDL_InitMainThread(void)
|
|
|
+{
|
|
|
+ if (SDL_main_thread_initialized) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ SDL_InitTLSData();
|
|
|
+#ifndef SDL_TIMERS_DISABLED
|
|
|
+ SDL_TicksInit();
|
|
|
+#endif
|
|
|
+ SDL_LogInit();
|
|
|
+
|
|
|
+ SDL_main_thread_initialized = SDL_TRUE;
|
|
|
+}
|
|
|
+
|
|
|
+static void SDL_QuitMainThread(void)
|
|
|
+{
|
|
|
+ if (!SDL_main_thread_initialized) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ SDL_LogQuit();
|
|
|
+#ifndef SDL_TIMERS_DISABLED
|
|
|
+ SDL_TicksQuit();
|
|
|
+#endif
|
|
|
+ SDL_QuitTLSData();
|
|
|
+
|
|
|
+ SDL_main_thread_initialized = SDL_FALSE;
|
|
|
+}
|
|
|
+
|
|
|
int SDL_InitSubSystem(Uint32 flags)
|
|
|
{
|
|
|
Uint32 flags_initialized = 0;
|
|
@@ -187,9 +218,6 @@ int SDL_InitSubSystem(Uint32 flags)
|
|
|
return SDL_SetError("Application didn't initialize properly, did you include SDL_main.h in the file containing your main() function?");
|
|
|
}
|
|
|
|
|
|
- SDL_InitTLSData();
|
|
|
- SDL_LogInit();
|
|
|
-
|
|
|
/* Clear the error message */
|
|
|
SDL_ClearError();
|
|
|
|
|
@@ -205,10 +233,6 @@ int SDL_InitSubSystem(Uint32 flags)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
-#ifndef SDL_TIMERS_DISABLED
|
|
|
- SDL_TicksInit();
|
|
|
-#endif
|
|
|
-
|
|
|
/* Initialize the event subsystem */
|
|
|
if (flags & SDL_INIT_EVENTS) {
|
|
|
#ifndef SDL_EVENTS_DISABLED
|
|
@@ -496,10 +520,6 @@ void SDL_Quit(void)
|
|
|
#endif
|
|
|
SDL_QuitSubSystem(SDL_INIT_EVERYTHING);
|
|
|
|
|
|
-#ifndef SDL_TIMERS_DISABLED
|
|
|
- SDL_TicksQuit();
|
|
|
-#endif
|
|
|
-
|
|
|
#ifdef SDL_USE_LIBDBUS
|
|
|
SDL_DBus_Quit();
|
|
|
#endif
|
|
@@ -507,14 +527,12 @@ void SDL_Quit(void)
|
|
|
SDL_ClearHints();
|
|
|
SDL_AssertionsQuit();
|
|
|
|
|
|
- SDL_LogQuit();
|
|
|
-
|
|
|
/* Now that every subsystem has been quit, we reset the subsystem refcount
|
|
|
* and the list of initialized subsystems.
|
|
|
*/
|
|
|
SDL_memset(SDL_SubsystemRefCount, 0x0, sizeof(SDL_SubsystemRefCount));
|
|
|
|
|
|
- SDL_QuitTLSData();
|
|
|
+ SDL_QuitMainThread();
|
|
|
|
|
|
SDL_bInMainQuit = SDL_FALSE;
|
|
|
}
|