diff --git a/dlls/mshtml/main.c b/dlls/mshtml/main.c
index 41f32ebd478..9a2a4f0084f 100644
--- a/dlls/mshtml/main.c
+++ b/dlls/mshtml/main.c
@@ -86,6 +86,20 @@ static void thread_detach(void)
{
thread_data_t *thread_data;
+ thread_data = get_thread_data(FALSE);
+ if(!thread_data)
+ return;
+
+ if(thread_data->thread_hwnd)
+ DestroyWindow(thread_data->thread_hwnd);
+
+ mshtml_free(thread_data);
+}
+
+static void process_detach(void)
+{
+ close_gecko();
+
if(typelib) {
unsigned i;
@@ -96,14 +110,10 @@ static void thread_detach(void)
ITypeLib_Release(typelib);
}
- thread_data = get_thread_data(FALSE);
- if(!thread_data)
- return;
-
- if(thread_data->thread_hwnd)
- DestroyWindow(thread_data->thread_hwnd);
-
- mshtml_free(thread_data);
+ if(shdoclc)
+ FreeLibrary(shdoclc);
+ if(mshtml_tls)
+ TlsFree(mshtml_tls);
}
HINSTANCE get_shdoclc(void)
@@ -124,11 +134,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
hInst = hInstDLL;
break;
case DLL_PROCESS_DETACH:
- close_gecko();
- if(shdoclc)
- FreeLibrary(shdoclc);
- if(mshtml_tls)
- TlsFree(mshtml_tls);
+ process_detach();
break;
case DLL_THREAD_DETACH:
thread_detach();