diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 46cd4c3fa..17ac09b82 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2014-11-20 Corinna Vinschen + + * init.cc (dll_entry): Call _my_tls.remove with INFINITE wait period + to avoid SEGVs and subsequent hangs in _cygtls::find_tls. + * miscfuncs.cc (thread_wrapper): Ditto. + 2014-11-20 Iuliu Rus * net.cc (fdsock): Change default values for socket buffers on 32 bit diff --git a/winsup/cygwin/init.cc b/winsup/cygwin/init.cc index 78e88b94b..f01f35e5f 100644 --- a/winsup/cygwin/init.cc +++ b/winsup/cygwin/init.cc @@ -95,7 +95,7 @@ dll_entry (HANDLE h, DWORD reason, void *static_load) if (dll_finished_loading && (PVOID) &_my_tls > (PVOID) &test_stack_marker && _my_tls.isinitialized ()) - _my_tls.remove (0); + _my_tls.remove (INFINITE); break; } diff --git a/winsup/cygwin/miscfuncs.cc b/winsup/cygwin/miscfuncs.cc index eee47a53a..14ead9152 100644 --- a/winsup/cygwin/miscfuncs.cc +++ b/winsup/cygwin/miscfuncs.cc @@ -564,7 +564,7 @@ thread_wrapper (PVOID arg) cfree (arg); /* Remove _cygtls from this stack since it won't be used anymore. */ - _my_tls.remove (0); + _my_tls.remove (INFINITE); /* Set stack values in TEB */ PTEB teb = NtCurrentTeb ();