Commit b5d225e4 authored by Henri Verbeet's avatar Henri Verbeet Committed by Alexandre Julliard

wined3d: Avoid unmapping the module while the CS thread is still running.

parent b7140a21
...@@ -2451,7 +2451,7 @@ static DWORD WINAPI wined3d_cs_run(void *ctx) ...@@ -2451,7 +2451,7 @@ static DWORD WINAPI wined3d_cs_run(void *ctx)
queue->tail = queue->head = 0; queue->tail = queue->head = 0;
TRACE("Stopped.\n"); TRACE("Stopped.\n");
return 0; FreeLibraryAndExitThread(cs->wined3d_module, 0);
} }
struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device)
...@@ -2490,9 +2490,19 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) ...@@ -2490,9 +2490,19 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device)
goto fail; goto fail;
} }
if (!(GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
(const WCHAR *)wined3d_cs_run, &cs->wined3d_module)))
{
ERR("Failed to get wined3d module handle.\n");
CloseHandle(cs->event);
HeapFree(GetProcessHeap(), 0, cs->data);
goto fail;
}
if (!(cs->thread = CreateThread(NULL, 0, wined3d_cs_run, cs, 0, NULL))) if (!(cs->thread = CreateThread(NULL, 0, wined3d_cs_run, cs, 0, NULL)))
{ {
ERR("Failed to create wined3d command stream thread.\n"); ERR("Failed to create wined3d command stream thread.\n");
FreeLibrary(cs->wined3d_module);
CloseHandle(cs->event); CloseHandle(cs->event);
HeapFree(GetProcessHeap(), 0, cs->data); HeapFree(GetProcessHeap(), 0, cs->data);
goto fail; goto fail;
......
...@@ -3253,6 +3253,7 @@ struct wined3d_cs ...@@ -3253,6 +3253,7 @@ struct wined3d_cs
struct wined3d_device *device; struct wined3d_device *device;
struct wined3d_fb_state fb; struct wined3d_fb_state fb;
struct wined3d_state state; struct wined3d_state state;
HMODULE wined3d_module;
HANDLE thread; HANDLE thread;
DWORD thread_id; DWORD thread_id;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment