From: Rob Schneider Date: Tue, 15 Jan 2013 19:49:12 +0000 (-0800) Subject: libgl-gdi: Avoid hangs on DLL_PROCESS_DETACH. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=45575ff388cbb4c49480c6e5e8eea32d5c7d74a4;p=mesa.git libgl-gdi: Avoid hangs on DLL_PROCESS_DETACH. At process exit DLL_PROCESS_DETACH is signaled to DllMain(), where then a final cleanup is triggered. In stw_cleanup() code is triggered that tries to communicate a shutdown to the spawned threads -- however at that time those threads have already been terminated by the OS and so the process hangs. v2: skip stw_cleanup_thread() too Signed-off-by: José Fonseca --- diff --git a/src/gallium/targets/libgl-gdi/libgl_gdi.c b/src/gallium/targets/libgl-gdi/libgl_gdi.c index 112904ab5fe..3f7dc00b080 100644 --- a/src/gallium/targets/libgl-gdi/libgl_gdi.c +++ b/src/gallium/targets/libgl-gdi/libgl_gdi.c @@ -159,8 +159,10 @@ DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) break; case DLL_PROCESS_DETACH: - stw_cleanup_thread(); - stw_cleanup(); + if (lpReserved == NULL) { + stw_cleanup_thread(); + stw_cleanup(); + } break; } return TRUE;