static BOOL wined3d_dll_destroy(HINSTANCE hInstDLL) { DWORD wined3d_context_tls_idx = context_get_tls_idx(); unsigned int i; if (!TlsFree(wined3d_context_tls_idx)) { DWORD err = GetLastError(); ERR("Failed to free context TLS index, err %#x.\n", err); } for (i = 0; i < wndproc_table.count; ++i) { /* Trying to unregister these would be futile. These entries can only * exist if either we skipped them in wined3d_unregister_window() due * to the application replacing the wndproc after the entry was * registered, or if the application still has an active wined3d * device. In the latter case the application has bigger problems than * these entries. */ WARN("Leftover wndproc table entry %p.\n", &wndproc_table.entries[i]); } HeapFree(GetProcessHeap(), 0, wndproc_table.entries); HeapFree(GetProcessHeap(), 0, wined3d_settings.logo); UnregisterClassA(WINED3D_OPENGL_WINDOW_CLASS_NAME, hInstDLL); DeleteCriticalSection(&wined3d_wndproc_cs); DeleteCriticalSection(&wined3d_cs); return TRUE; }
static BOOL wined3d_dll_destroy(HINSTANCE hInstDLL) { DWORD wined3d_context_tls_idx = context_get_tls_idx(); unsigned int i; if (!TlsFree(wined3d_context_tls_idx)) { DWORD err = GetLastError(); ERR("Failed to free context TLS index, err %#x.\n", err); } for (i = 0; i < wndproc_table.count; ++i) { struct wined3d_wndproc *entry = &wndproc_table.entries[i]; SetWindowLongPtrW(entry->window, GWLP_WNDPROC, (LONG_PTR)entry->proc); } HeapFree(GetProcessHeap(), 0, wndproc_table.entries); HeapFree(GetProcessHeap(), 0, wined3d_settings.logo); UnregisterClassA(WINED3D_OPENGL_WINDOW_CLASS_NAME, hInstDLL); wined3d_mutex_term(); return TRUE; }