Browse Source

Fixed OS/2 build

Sam Lantinga 1 year ago
parent
commit
b13dcf24d6
3 changed files with 19 additions and 45 deletions
  1. 0 10
      src/SDL.c
  2. 19 27
      src/thread/os2/SDL_systls.c
  3. 0 8
      src/thread/os2/SDL_systls_c.h

+ 0 - 10
src/SDL.c

@@ -29,9 +29,6 @@
 #endif
 #if defined(__OS2__)
 #include "core/os2/SDL_os2.h"
-#ifdef SDL_THREAD_OS2
-#include "thread/os2/SDL_systls_c.h"
-#endif
 #endif
 
 /* this checks for HAVE_DBUS_DBUS_H internally. */
@@ -200,10 +197,6 @@ int SDL_InitSubSystem(Uint32 flags)
     SDL_DBus_Init();
 #endif
 
-#ifdef SDL_THREAD_OS2
-    SDL_OS2TLSAlloc(); /* thread/os2/SDL_systls.c */
-#endif
-
 #ifdef SDL_VIDEO_DRIVER_WINDOWS
     if (flags & (SDL_INIT_HAPTIC | SDL_INIT_JOYSTICK)) {
         if (SDL_HelperWindowCreate() < 0) {
@@ -380,9 +373,6 @@ int SDL_Init(Uint32 flags)
 void SDL_QuitSubSystem(Uint32 flags)
 {
 #if defined(__OS2__)
-#ifdef SDL_THREAD_OS2
-    SDL_OS2TLSFree(); /* thread/os2/SDL_systls.c */
-#endif
     SDL_OS2Quit();
 #endif
 

+ 19 - 27
src/thread/os2/SDL_systls.c

@@ -34,45 +34,22 @@
 
 SDL_TLSData **ppSDLTLSData = NULL;
 
-static ULONG  cTLSAlloc = 0;
-
-/* SDL_OS2TLSAlloc() called from SDL_InitSubSystem() */
-void SDL_OS2TLSAlloc(void)
+void SDL_SYS_InitTLSData(void)
 {
     ULONG ulRC;
 
-    if (cTLSAlloc == 0 || !ppSDLTLSData) {
-        /* First call - allocate the thread local memory (1 DWORD) */
+    if (!ppSDLTLSData) {
+        /* Allocate the thread local memory (1 DWORD) */
         ulRC = DosAllocThreadLocalMemory(1, (PULONG *)&ppSDLTLSData);
         if (ulRC != NO_ERROR) {
             debug_os2("DosAllocThreadLocalMemory() failed, rc = %u", ulRC);
         }
     }
-    cTLSAlloc++;
-}
-
-/* SDL_OS2TLSFree() called from SDL_QuitSubSystem() */
-void SDL_OS2TLSFree(void)
-{
-    ULONG ulRC;
-
-    if (cTLSAlloc != 0)
-        cTLSAlloc--;
-
-    if (cTLSAlloc == 0 && ppSDLTLSData) {
-        /* Last call - free the thread local memory */
-        ulRC = DosFreeThreadLocalMemory((PULONG)ppSDLTLSData);
-        if (ulRC != NO_ERROR) {
-            debug_os2("DosFreeThreadLocalMemory() failed, rc = %u", ulRC);
-        } else {
-            ppSDLTLSData = NULL;
-        }
-    }
 }
 
 SDL_TLSData *SDL_SYS_GetTLSData(void)
 {
-    return (!ppSDLTLSData)? NULL : *ppSDLTLSData;
+    return ppSDLTLSData ? *ppSDLTLSData : NULL;
 }
 
 int SDL_SYS_SetTLSData(SDL_TLSData *data)
@@ -84,6 +61,21 @@ int SDL_SYS_SetTLSData(SDL_TLSData *data)
     return 0;
 }
 
+void SDL_SYS_QuitTLSData(void)
+{
+    ULONG ulRC;
+
+    if (ppSDLTLSData) {
+        /* Free the thread local memory */
+        ulRC = DosFreeThreadLocalMemory((PULONG)ppSDLTLSData);
+        if (ulRC != NO_ERROR) {
+            debug_os2("DosFreeThreadLocalMemory() failed, rc = %u", ulRC);
+        } else {
+            ppSDLTLSData = NULL;
+        }
+    }
+}
+
 #endif /* SDL_THREAD_OS2 */
 
 /* vi: set ts=4 sw=4 expandtab: */

+ 0 - 8
src/thread/os2/SDL_systls_c.h

@@ -27,12 +27,4 @@
 
 extern SDL_TLSData **ppSDLTLSData;
 
-/* SDL_OS2TLSAlloc() called from SDL_InitSubSystem() */
-void SDL_OS2TLSAlloc(void);
-
-/* SDL_OS2TLSFree() called from SDL_QuitSubSystem() */
-void SDL_OS2TLSFree(void);
-
 #endif /* SDL_THREAD_OS2 */
-
-/* vi: set ts=4 sw=4 expandtab: */