libphobos: Don't call __gthread_key_delete in the emutls destroy function.

Fixes a EXC_BAD_ACCESS issue seen on Darwin when the libphobos DSO gets
unloaded.  Based on reading libgcc's emutls implementation, as it
doesn't call __gthread_key_delete directly, neither should libphobos.

libphobos/ChangeLog:

	* libdruntime/gcc/emutls.d (emutlsDestroyThread): Don't remove entry
	from global array.
	(_d_emutls_destroy): Don't call __gthread_key_delete.
This commit is contained in:
Iain Buclaw 2021-11-19 14:26:07 +01:00
parent ea2954df43
commit d686cb0d74
1 changed files with 0 additions and 6 deletions

View File

@ -229,9 +229,6 @@ void** emutlsAlloc(shared __emutls_object* obj) nothrow @nogc
extern (C) void emutlsDestroyThread(void* ptr) nothrow @nogc
{
auto arr = cast(TlsArray*) ptr;
emutlsMutex.lock_nothrow();
emutlsArrays.remove(arr);
emutlsMutex.unlock_nothrow();
foreach (entry; *arr)
{
@ -308,9 +305,6 @@ void _d_emutls_scan(scope void delegate(void* pbeg, void* pend) nothrow cb) noth
// Call this after druntime has been unloaded
void _d_emutls_destroy() nothrow @nogc
{
if (__gthread_key_delete(emutlsKey) != 0)
abort();
(cast(Mutex) _emutlsMutex.ptr).__dtor();
destroy(emutlsArrays);
}