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:
parent
ea2954df43
commit
d686cb0d74
1 changed files with 0 additions and 6 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue