[PATCH 1/2] winmm: Avoid using SuspendThread, it can hang Wine.

Alexandre Julliard julliard at winehq.org
Thu Feb 9 10:04:08 CST 2012


Joerg-Cyril.Hoehle at t-systems.com writes:

> @@ -1006,7 +1008,9 @@ static	BOOL	MMSYSTEM_MidiStream_MessageHandler(WINE_MIDIStream* lpMidiStrm, LPWI
>      LPMIDIHDR	lpMidiHdr;
>      LPMIDIHDR*	lpmh;
>      LPBYTE	lpData;
> +    BOOL	paused = FALSE;
>  
> +still_paused:
>      switch (msg->message) {
>      case WM_QUIT:
>  	SetEvent(lpMidiStrm->hEvent);
> @@ -1028,6 +1032,16 @@ static	BOOL	MMSYSTEM_MidiStream_MessageHandler(WINE_MIDIStream* lpMidiStrm, LPWI
>  	}
>  	lpMidiStrm->lpMidiHdr = 0;
>  	SetEvent(lpMidiStrm->hEvent);
> +	return TRUE;
> +    case WINE_MSM_RESUME:
> +	/* FIXME: send out cc64 0 (turn off sustain pedal) on every channel */
> +	lpMidiStrm->dwStartTicks = GetTickCount() - lpMidiStrm->dwPositionMS;
> +	SetEvent(lpMidiStrm->hEvent);
> +	return TRUE;
> +    case WINE_MSM_PAUSE:
> +	/* FIXME: send out cc64 0 (turn off sustain pedal) on every channel */
> +	paused = TRUE;
> +	SetEvent(lpMidiStrm->hEvent);
>  	break;
>      case WINE_MSM_HEADER:
>  	/* sets initial tick count for first MIDIHDR */
> @@ -1114,6 +1128,10 @@ static	BOOL	MMSYSTEM_MidiStream_MessageHandler(WINE_MIDIStream* lpMidiStrm, LPWI
>  	FIXME("Unknown message %d\n", msg->message);
>  	break;
>      }
> +    if (paused) {
> +	GetMessageA(msg, 0, 0, 0);
> +	goto still_paused;
> +    }

Please stop abusing goto, write a proper loop instead.

-- 
Alexandre Julliard
julliard at winehq.org



More information about the wine-devel mailing list