[PATCH 2/2] winmm: Use a thread to send driver messages on Win9x (try 2)

Bruno Jesus 00cpxxx at gmail.com
Thu Dec 1 08:27:43 CST 2016


On Thu, Dec 1, 2016 at 12:11 PM, Andrew Eikum <aeikum at codeweavers.com> wrote:
> This seems like something you should be able to write a test for. I'm
> also curious how this manages to work on Windows >= XP

The test is at [1], if you run in Win9x it will fail (Win9x uses
different thread), while running at >= XP it will succeed (>=XP uses
same thread). This works in XP due to a shim that blindly ignores the
SuspendThread/ResumeThread calls when inside a WinMM callback.

[1] http://source.winehq.org/source/dlls/winmm/tests/wave.c#0570

> You need to be more careful about thread shutdown. See
> WINMM_StartDevicesThread and WINMM_DevicesThreadProc. I think you
> could use the same logic, including WINMM_DevicesThreadDone, to
> determine when to quit your new thread.

I tried understand what you say but I'm not sure yet.
WINMM_DeleteWaveform is only called on process detach, can the DLL
live after that? What you mean is that I should call

    GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
            (const WCHAR *)WINMM_StartDevicesThread, &g_9xthread_module);

inside WINMM_SetupCallback and then

FreeLibraryAndExitThread(g_9xthread_module, 1);

when returning from the thread?



More information about the wine-devel mailing list