From 2b0e56c8d83f9c2e267f6209baae4898fcb916da Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Tue, 29 Oct 2002 21:44:23 +0000 Subject: [PATCH] Now only storing thread id for mci tasks (16 bit htask is now gotten from WOW functions). --- dlls/winmm/driver.c | 2 ++ dlls/winmm/mci.c | 1 - dlls/winmm/mmsystem.c | 33 ++++++++++++++++++++++++--------- dlls/winmm/winemm.h | 8 +++----- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/dlls/winmm/driver.c b/dlls/winmm/driver.c index 9e19dd2809d..1a10fbe6745 100644 --- a/dlls/winmm/driver.c +++ b/dlls/winmm/driver.c @@ -34,6 +34,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(driver); static LPWINE_DRIVER lpDrvItemList = NULL; +WINE_MMTHREAD* (*pFnGetMMThread16)(HANDLE16 h) /* = NULL */; + /************************************************************************** * DRIVER_GetNumberOfModuleRefs [internal] * diff --git a/dlls/winmm/mci.c b/dlls/winmm/mci.c index 40d42044ea0..9300b48ced7 100644 --- a/dlls/winmm/mci.c +++ b/dlls/winmm/mci.c @@ -489,7 +489,6 @@ static DWORD MCI_LoadMciDriver(LPCSTR _strDevTyp, LPWINE_MCIDRIVER* lpwmd) wmd->lpfnYieldProc = MCI_DefYieldProc; wmd->dwYieldData = VK_CANCEL; - wmd->hCreatorTask = GetCurrentTask(); wmd->CreatorThread = GetCurrentThreadId(); EnterCriticalSection(&WINMM_IData->cs); diff --git a/dlls/winmm/mmsystem.c b/dlls/winmm/mmsystem.c index 43171b09891..74c13323f90 100644 --- a/dlls/winmm/mmsystem.c +++ b/dlls/winmm/mmsystem.c @@ -49,6 +49,7 @@ extern LONG CALLBACK MMSYSTEM_CallTo16_long_l (FARPROC16,LONG); extern LONG CALLBACK MMSYSTEM_CallTo16_long_lwll (LPMMIOPROC16,LONG,WORD,LONG,LONG); /* ### stop build ### */ +static WINE_MMTHREAD* WINMM_GetmmThread(HANDLE16); static LRESULT MMIO_Callback16(SEGPTR, LPMMIOINFO, UINT, LPARAM, LPARAM); /* ################################################### @@ -85,10 +86,12 @@ BOOL WINAPI MMSYSTEM_LibMain(DWORD fdwReason, HINSTANCE hinstDLL, WORD ds, WINMM_IData->h16Module32 = hndl; /* hook in our 16 bit function pointers */ pFnMmioCallback16 = MMIO_Callback16; + pFnGetMMThread16 = WINMM_GetmmThread; break; case DLL_PROCESS_DETACH: FreeLibrary(WINMM_IData->h16Module32); pFnMmioCallback16 = NULL; + pFnGetMMThread16 = NULL; break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: @@ -625,7 +628,7 @@ HTASK16 WINAPI mciGetCreatorTask16(UINT16 uDeviceID) LPWINE_MCIDRIVER wmd; HTASK16 ret = 0; - if ((wmd = MCI_GetDriver(uDeviceID))) ret = wmd->hCreatorTask; + if ((wmd = MCI_GetDriver(uDeviceID))) ret = K32WOWHandle16(wmd->CreatorThread, WOW_TYPE_HTASK); TRACE("(%u) => %04x\n", uDeviceID, ret); return ret; @@ -1829,6 +1832,18 @@ void WINAPI mmTaskYield16(void) extern DWORD WINAPI GetProcessFlags(DWORD); +/****************************************************************** + * WINMM_GetmmThread + * + * + */ +static WINE_MMTHREAD* WINMM_GetmmThread(HANDLE16 h) +{ + return (WINE_MMTHREAD*)MapSL( MAKESEGPTR(h, 0) ); +} + +void WINAPI WINE_mmThreadEntryPoint(DWORD); + /************************************************************************** * mmThreadCreate [MMSYSTEM.1120] * @@ -1850,7 +1865,7 @@ LRESULT WINAPI mmThreadCreate16(FARPROC16 fpThreadAddr, LPHANDLE lpHndl, DWORD d if (hndl == 0) { ret = 2; } else { - WINE_MMTHREAD* lpMMThd = MapSL( MAKESEGPTR(hndl, 0) ); + WINE_MMTHREAD* lpMMThd = WINMM_GetmmThread(hndl); #if 0 /* force mmtask routines even if mmthread is required */ @@ -1938,7 +1953,7 @@ void WINAPI mmThreadSignal16(HANDLE16 hndl) TRACE("(%04x)!\n", hndl); if (hndl) { - WINE_MMTHREAD* lpMMThd = MapSL( MAKESEGPTR(hndl, 0) ); + WINE_MMTHREAD* lpMMThd = WINMM_GetmmThread(hndl); lpMMThd->dwCounter++; if (lpMMThd->hThread != 0) { @@ -1994,7 +2009,7 @@ void WINAPI mmThreadBlock16(HANDLE16 hndl) TRACE("(%04x)!\n", hndl); if (hndl) { - WINE_MMTHREAD* lpMMThd = MapSL( MAKESEGPTR(hndl, 0) ); + WINE_MMTHREAD* lpMMThd = WINMM_GetmmThread(hndl); if (lpMMThd->hThread != 0) { DWORD lc; @@ -2019,7 +2034,7 @@ BOOL16 WINAPI mmThreadIsCurrent16(HANDLE16 hndl) TRACE("(%04x)!\n", hndl); if (hndl && mmThreadIsValid16(hndl)) { - WINE_MMTHREAD* lpMMThd = MapSL( MAKESEGPTR(hndl, 0) ); + WINE_MMTHREAD* lpMMThd = WINMM_GetmmThread(hndl); ret = (GetCurrentThreadId() == lpMMThd->dwThreadID); } TRACE("=> %d\n", ret); @@ -2036,7 +2051,7 @@ BOOL16 WINAPI mmThreadIsValid16(HANDLE16 hndl) TRACE("(%04x)!\n", hndl); if (hndl) { - WINE_MMTHREAD* lpMMThd = MapSL( MAKESEGPTR(hndl, 0) ); + WINE_MMTHREAD* lpMMThd = WINMM_GetmmThread(hndl); if (!IsBadWritePtr(lpMMThd, sizeof(WINE_MMTHREAD)) && lpMMThd->dwSignature == WINE_MMTHREAD_CREATED && @@ -2068,19 +2083,19 @@ HANDLE16 WINAPI mmThreadGetTask16(HANDLE16 hndl) TRACE("(%04x)\n", hndl); if (mmThreadIsValid16(hndl)) { - WINE_MMTHREAD* lpMMThd = MapSL( MAKESEGPTR(hndl, 0) ); + WINE_MMTHREAD* lpMMThd = WINMM_GetmmThread(hndl); ret = lpMMThd->hTask; } return ret; } /************************************************************************** - * __wine_mmThreadEntryPoint (MMSYSTEM.2047) + * WINE_mmThreadEntryPoint (MMSYSTEM.2047) */ void WINAPI WINE_mmThreadEntryPoint(DWORD _pmt) { HANDLE16 hndl = (HANDLE16)_pmt; - WINE_MMTHREAD* lpMMThd = MapSL( MAKESEGPTR(hndl, 0) ); + WINE_MMTHREAD* lpMMThd = WINMM_GetmmThread(hndl); TRACE("(%04x %p)\n", hndl, lpMMThd); diff --git a/dlls/winmm/winemm.h b/dlls/winmm/winemm.h index 6a58f0291a5..aa999b4b4a0 100644 --- a/dlls/winmm/winemm.h +++ b/dlls/winmm/winemm.h @@ -147,7 +147,6 @@ typedef struct tagWINE_MCIDRIVER { YIELDPROC lpfnYieldProc; DWORD dwYieldData; BOOL bIs32; - HTASK16 hCreatorTask; DWORD CreatorThread; UINT uTypeCmdTable; UINT uSpecificCmdTable; @@ -255,8 +254,6 @@ DWORD MCI_SendCommand(UINT wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwParam2, DWORD MCI_SendCommandFrom32(UINT wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwParam2); DWORD MCI_SendCommandFrom16(UINT wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwParam2); -void CALLBACK WINE_mmThreadEntryPoint(DWORD _pmt); - void MMSYSTEM_MMTIME16to32(LPMMTIME mmt32, const MMTIME16* mmt16); void MMSYSTEM_MMTIME32to16(LPMMTIME16 mmt16, const MMTIME* mmt32); @@ -338,12 +335,13 @@ void CALLBACK MMDRV_WaveOut_Callback(HDRVR hDev, UINT uMsg, DWORD dwInstance, DW BOOL MMDRV_GetDescription16(const char* fname, char* buf, int buflen); /* Global variables */ -extern LPWINE_MM_IDATA WINMM_IData; +extern LPWINE_MM_IDATA WINMM_IData; /* pointers to 16 bit functions (if sibling MMSYSTEM.DLL is loaded * NULL otherwise */ -extern LRESULT (*pFnMmioCallback16)(SEGPTR,LPMMIOINFO,UINT,LPARAM,LPARAM); +extern LRESULT (*pFnMmioCallback16)(SEGPTR,LPMMIOINFO,UINT,LPARAM,LPARAM); +extern WINE_MMTHREAD* (*pFnGetMMThread16)(HANDLE16); /* HANDLE16 -> HANDLE conversions */ #define HDRVR_32(h16) ((HDRVR)(ULONG_PTR)(h16))