Squashed commit of the following: commit 6b8f933589aa3925978a23e77a305a7e89c6ae4a Author: Xing Ji <jixingcn@gmail.com> Date: Wed Mar 24 22:31:29 2021 +0800 update the dynapi by `gendynapi.pl` commit ebd1790c19983b652713f40ab1e139e485e1a2b7 Author: Xing Ji <jixingcn@gmail.com> Date: Wed Mar 24 22:17:48 2021 +0800 revert the change in src/dynapi commit 734b5f85c1613070081e39238e84198128971b53 Merge: 5a56e5a8 5ac6bd54 Author: Xing Ji <jixingcn@gmail.com> Date: Wed Mar 24 22:14:40 2021 +0800 Merge remote-tracking branch 'libsdl/main' into jixingcn commit 5a56e5a8227d9cff6b497b681c618a76bec1cae1 Author: Xing Ji <jixingcn@gmail.com> Date: Mon Mar 22 23:55:10 2021 +0800 Fix #3596, can call the `SDL_TLSCleanup` to cleanup the TLS data when closing the application
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
diff --git a/include/SDL_thread.h b/include/SDL_thread.h
index 49168c5..be0601c 100644
--- a/include/SDL_thread.h
+++ b/include/SDL_thread.h
@@ -435,6 +435,10 @@ extern DECLSPEC void * SDLCALL SDL_TLSGet(SDL_TLSID id);
*/
extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, void (SDLCALL *destructor)(void*));
+/**
+ * \brief Cleanup all TLS data for this thread.
+ */
+extern DECLSPEC void SDLCALL SDL_TLSCleanup(void);
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
diff --git a/src/dynapi/SDL_dynapi_overrides.h b/src/dynapi/SDL_dynapi_overrides.h
index 085156e..2d35d5f 100644
--- a/src/dynapi/SDL_dynapi_overrides.h
+++ b/src/dynapi/SDL_dynapi_overrides.h
@@ -809,3 +809,4 @@
#define SDL_isgraph SDL_isgraph_REAL
#define SDL_AndroidShowToast SDL_AndroidShowToast_REAL
#define SDL_GetAudioDeviceSpec SDL_GetAudioDeviceSpec_REAL
+#define SDL_TLSCleanup SDL_TLSCleanup_REAL
diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h
index 1cd2853..6d89825 100644
--- a/src/dynapi/SDL_dynapi_procs.h
+++ b/src/dynapi/SDL_dynapi_procs.h
@@ -874,3 +874,4 @@ SDL_DYNAPI_PROC(int,SDL_isgraph,(int a),(a),return)
SDL_DYNAPI_PROC(int,SDL_AndroidShowToast,(const char *a, int b, int c, int d, int e),(a,b,c,d,e),return)
#endif
SDL_DYNAPI_PROC(int,SDL_GetAudioDeviceSpec,(int a, int b, SDL_AudioSpec *c),(a,b,c),return)
+SDL_DYNAPI_PROC(void,SDL_TLSCleanup,(void),(),)
diff --git a/src/thread/SDL_thread.c b/src/thread/SDL_thread.c
index 05c05ce..438612c 100644
--- a/src/thread/SDL_thread.c
+++ b/src/thread/SDL_thread.c
@@ -82,7 +82,7 @@ SDL_TLSSet(SDL_TLSID id, const void *value, void (SDLCALL *destructor)(void *))
return 0;
}
-static void
+void
SDL_TLSCleanup()
{
SDL_TLSData *storage;