winmm 16/32 split (#8)
Eric Pouech
eric.pouech at wanadoo.fr
Tue Oct 29 09:29:05 CST 2002
ChangeLog:
- now only storing thread id for mci tasks (16 bit htask is now gotten
from WOW functions)
A+
-------------- next part --------------
--- winmm_7/driver.c Tue Oct 29 09:54:08 2002
+++ winmm_8/driver.c Tue Oct 29 12:05:30 2002
@@ -34,6 +34,8 @@
static LPWINE_DRIVER lpDrvItemList = NULL;
+WINE_MMTHREAD* (*pFnGetMMThread16)(HANDLE16 h) /* = NULL */;
+
/**************************************************************************
* DRIVER_GetNumberOfModuleRefs [internal]
*
--- winmm_7/mci.c Tue Oct 29 09:54:08 2002
+++ winmm_8/mci.c Tue Oct 29 12:19:02 2002
@@ -489,7 +489,6 @@
wmd->lpfnYieldProc = MCI_DefYieldProc;
wmd->dwYieldData = VK_CANCEL;
- wmd->hCreatorTask = GetCurrentTask();
wmd->CreatorThread = GetCurrentThreadId();
EnterCriticalSection(&WINMM_IData->cs);
--- winmm_7/mmsystem.c Tue Oct 29 12:03:44 2002
+++ winmm_8/mmsystem.c Tue Oct 29 15:04:10 2002
@@ -49,6 +49,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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);
--- winmm_7/winemm.h Tue Oct 29 16:09:10 2002
+++ winmm_8/winemm.h Tue Oct 29 16:09:24 2002
@@ -147,7 +147,6 @@
YIELDPROC lpfnYieldProc;
DWORD dwYieldData;
BOOL bIs32;
- HTASK16 hCreatorTask;
DWORD CreatorThread;
UINT uTypeCmdTable;
UINT uSpecificCmdTable;
@@ -255,8 +254,6 @@
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 @@
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))
More information about the wine-patches
mailing list