Jörg Höhle : winmm: Fix logic conditions.
Alexandre Julliard
julliard at winehq.org
Fri Aug 5 10:20:49 CDT 2011
Module: wine
Branch: master
Commit: b9de906ac10176f956333dadb3a18d03690085df
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b9de906ac10176f956333dadb3a18d03690085df
Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date: Wed Jul 27 23:44:09 2011 +0200
winmm: Fix logic conditions.
---
dlls/winmm/waveform.c | 14 ++++++++------
1 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/dlls/winmm/waveform.c b/dlls/winmm/waveform.c
index 160395c..a571fb8 100644
--- a/dlls/winmm/waveform.c
+++ b/dlls/winmm/waveform.c
@@ -706,9 +706,9 @@ static MMRESULT WINMM_MapDevice(WINMM_OpenInfo *info, BOOL is_out)
}
/* no direct match, so set up the ACM stream */
- if(info->format->wFormatTag != WAVE_FORMAT_PCM ||
- (info->format->wFormatTag == WAVE_FORMAT_EXTENSIBLE &&
- !IsEqualGUID(&fmtex->SubFormat, &KSDATAFORMAT_SUBTYPE_PCM))){
+ if(info->format->wFormatTag != WAVE_FORMAT_PCM &&
+ !(info->format->wFormatTag == WAVE_FORMAT_EXTENSIBLE &&
+ IsEqualGUID(&fmtex->SubFormat, &KSDATAFORMAT_SUBTYPE_PCM))){
/* convert to PCM format if it's not already */
mr = WINMM_TryDeviceMapping(info, info->format->nChannels,
info->format->nSamplesPerSec, 16, is_out);
@@ -889,6 +889,8 @@ static LRESULT WINMM_OpenDevice(WINMM_Device *device, WINMM_MMDevice *mmdevice,
goto error;
}
+ /* As the devices thread is waiting on g_device_handles, it can
+ * only be modified from within this same thread. */
if(g_device_handles){
g_device_handles = HeapReAlloc(GetProcessHeap(), 0, g_device_handles,
sizeof(HANDLE) * (g_devhandle_count + 1));
@@ -2087,11 +2089,11 @@ static DWORD WINAPI WINMM_DevicesThreadProc(void *arg)
DWORD wait;
wait = MsgWaitForMultipleObjects(g_devhandle_count, g_device_handles,
FALSE, INFINITE, QS_ALLINPUT);
- if(wait == g_devhandle_count - WAIT_OBJECT_0){
+ if(wait == g_devhandle_count + WAIT_OBJECT_0){
MSG msg;
if(PeekMessageW(&msg, g_devices_hwnd, 0, 0, PM_REMOVE))
ERR("Unexpected message: 0x%x\n", msg.message);
- }else if(wait < g_devhandle_count){
+ }else if(wait < g_devhandle_count + WAIT_OBJECT_0){
WINMM_Device *device = g_handle_devices[wait - WAIT_OBJECT_0];
if(device->render)
WOD_PushData(device);
@@ -2149,7 +2151,7 @@ static BOOL WINMM_StartDevicesThread(void)
wait = WaitForMultipleObjects(2, events, FALSE, INFINITE);
CloseHandle(events[0]);
if(wait != WAIT_OBJECT_0){
- if(wait == 1 - WAIT_OBJECT_0){
+ if(wait == 1 + WAIT_OBJECT_0){
CloseHandle(g_devices_thread);
g_devices_thread = NULL;
g_devices_hwnd = NULL;
More information about the wine-cvs
mailing list