|
@@ -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: */
|