Fixed OS/2 build
diff --git a/src/SDL.c b/src/SDL.c
index 15e5f87..b55facd 100644
--- a/src/SDL.c
+++ b/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 @@
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 @@
void SDL_QuitSubSystem(Uint32 flags)
{
#if defined(__OS2__)
-#ifdef SDL_THREAD_OS2
- SDL_OS2TLSFree(); /* thread/os2/SDL_systls.c */
-#endif
SDL_OS2Quit();
#endif
diff --git a/src/thread/os2/SDL_systls.c b/src/thread/os2/SDL_systls.c
index 5c380dd..75ed562 100644
--- a/src/thread/os2/SDL_systls.c
+++ b/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 @@
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: */
diff --git a/src/thread/os2/SDL_systls_c.h b/src/thread/os2/SDL_systls_c.h
index bb39443..ad4fcef 100644
--- a/src/thread/os2/SDL_systls_c.h
+++ b/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: */