We need to make sure all (important) cleanup is finished when we exit DllMain,
otherwise we might already unload krnl386 and deadlock
Since we can't have a synchronous DestroyWindow, use an extra message
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52511
Signed-off-by: Fabian Maurer <dark.shadow4(a)web.de>
Code flow is like follows:
- DOSVM_Exit -> RtlExitUserThread -> LdrShutdownThread
- acquire loader lock
- send DLL_THREAD_DETACH to imm32
- - calls DestroyWindow on its window
- - WM_DESTROY is handled asynchonously!
- send DLL_THREAD_DETACH to krnl386.exe
- - TASK_ExitTask
- - try get win16 lock, is blocked by ime32
meanwhile, at ime32
- handles WM_DESTROY
- already have win16 lock from user32
- __wine_ime_wnd_proc (WM_DESTROY) -> imm_couninit_thread -> CoRevokeInitializeSpy
- LdrGetProcedureAddress (want CoRevokeInitializeSpy)
- try get loader_lock, is blocked
Solution is to wait in ime32 DllMain until the cleanup as happened, aka CoRevokeInitializeSpy has finished.
--
v5: imm32: Prevent deadlock on unload
https://gitlab.winehq.org/wine/wine/-/merge_requests/1456
This serie allow to load alternate debug info from user's debuginfo cache.
This series (as is) will not bring lots of value as:
- no support for loading the missing debug info files (they should have been
been loaded beforehand)
- most of these files are in Dwarf5 format, that we don't support yet.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1477
--
v2: taskschd: Remove unused function heap_strdupW.
taskschd: Use standard C functions for memory allocation in task.c.
taskschd: Use standard C functions for memory allocation in regtask.c.
taskschd: Use standard C functions for memory allocation in folder_collection.c.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1466
--
v4: mfmediaengine: Add a fallback when the set engine format cannot be used to init samplegrabber.
mfmediaengine: Only accept engine formats which are render target compatible.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1046
I was watching some random YouTube stream and then heard a voice telling me to do this.
This can run wglgears on wow, though there's plenty of missing pieces which I don't have any idea how to fix (like buffer mapping, etc.). Opening it as a draft for now to show the whole thing, if it seems alright I'll send it in batches.
--
v7: HACK: wined3d: Disable persistent buffer mapping.
HACK: wined3d: Ignore D3DKMT open errors.
winex11.drv: Avoid crashing on invalid pixel format pointer.
opengl32: Use the +opengl debug channel everywhere.
opengl32: Implement wow64 thunks for glMapBuffer (et al.).
https://gitlab.winehq.org/wine/wine/-/merge_requests/1010