Move usage of 16 bit specific functions (MapSL) in 16 bit code only.
diff --git a/dlls/winmm/mmsystem.c b/dlls/winmm/mmsystem.c
index 2b29519..8dcbdfb 100644
--- a/dlls/winmm/mmsystem.c
+++ b/dlls/winmm/mmsystem.c
@@ -53,6 +53,12 @@
static LRESULT DRIVER_SendMessage16(HDRVR16, UINT, LPARAM, LPARAM);
static LRESULT MMIO_Callback16(SEGPTR, LPMMIOINFO, UINT, LPARAM, LPARAM);
+static void MMSYSTEM_Yield(void)
+{
+ DWORD count;
+ ReleaseThunkLock(&count);
+ RestoreThunkLock(count);
+}
/* ###################################################
* # LIBRARY #
@@ -87,6 +93,7 @@
pFnCloseDriver16 = DRIVER_CloseDriver16;
pFnSendMessage16 = DRIVER_SendMessage16;
pFnMmioCallback16 = MMIO_Callback16;
+ pFnYield16 = MMSYSTEM_Yield;
MMDRV_Init16();
break;
case DLL_PROCESS_DETACH:
diff --git a/dlls/winmm/time.c b/dlls/winmm/time.c
index d472c2a..e599bf8 100644
--- a/dlls/winmm/time.c
+++ b/dlls/winmm/time.c
@@ -348,6 +348,8 @@
return 0;
}
+void (*pFnYield16)(void) /* = NULL */;
+
/**************************************************************************
* timeGetTime [MMSYSTEM.607]
* timeGetTime [WINMM.@]
@@ -357,9 +359,7 @@
/* FIXME: releasing the win16 lock here is a temporary hack (I hope)
* that lets mciavi.drv run correctly
*/
- DWORD count;
- ReleaseThunkLock(&count);
- RestoreThunkLock(count);
+ if (pFnYield16) pFnYield16();
TIME_MMTimeStart();
return WINMM_IData->mmSysTimeMS;
}
diff --git a/dlls/winmm/winemm.h b/dlls/winmm/winemm.h
index 5045c6a..7a427a6 100644
--- a/dlls/winmm/winemm.h
+++ b/dlls/winmm/winemm.h
@@ -305,7 +305,7 @@
extern LRESULT (*pFnCallMMDrvFunc16)(DWORD /* in fact FARPROC16 */,WORD,WORD,LONG,LONG,LONG);
extern unsigned (*pFnLoadMMDrvFunc16)(LPCSTR,LPWINE_DRIVER, LPWINE_MM_DRIVER);
extern LRESULT (*pFnMmioCallback16)(DWORD,LPMMIOINFO,UINT,LPARAM,LPARAM);
-
+extern void (*pFnYield16)(void);
/* GetDriverFlags() returned bits is not documented (nor the call itself)
* Here are Wine only definitions of the bits
*/