Mesa (master): libgl-gdi: Avoid hangs on DLL_PROCESS_DETACH.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Tue Jan 15 22:16:17 UTC 2013


Module: Mesa
Branch: master
Commit: 45575ff388cbb4c49480c6e5e8eea32d5c7d74a4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=45575ff388cbb4c49480c6e5e8eea32d5c7d74a4

Author: Rob Schneider <Swizzle at t-online.de>
Date:   Tue Jan 15 11:49:12 2013 -0800

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 <jfonseca at vmware.com>

---

 src/gallium/targets/libgl-gdi/libgl_gdi.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/gallium/targets/libgl-gdi/libgl_gdi.c b/src/gallium/targets/libgl-gdi/libgl_gdi.c
index 112904a..3f7dc00 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;




More information about the mesa-commit mailing list