Fedora users, please test mci patch about time-out/hanging machine

Hin-Tak Leung hintak_leung at yahoo.co.uk
Thu Nov 19 10:12:02 CST 2009


pulseaudio occasionally gets into a confusion by itself. I found I need to do 

pulseaudio --cleanup-shm 
from time to time.

--- On Thu, 19/11/09, Joerg-Cyril.Hoehle at t-systems.com <Joerg-Cyril.Hoehle at t-systems.com> wrote:

> Hi,
> 
> Testhq.org results from 17th of November about winmm:mci
> were striking:
> All machines producing a timeout had "f11" in their name.
> (Another day, some f11 machines passed the tests).
> http://test.winehq.org/data/4990ca0ea342bd115a9a46047b3b2de599cb916e/index_Wine.html
> 
> Please test whether the following patch correlates with
> hanging machines.
> Not checking waveoutwrite's return code for sure has the
> potential to hang the
> play loop, waiting for a buffer to come back that was never
> sent out in case of error.
> 
> But then, why did waveOutWrite fail? That's what I'd like
> you to investigate. Why Fedora 11?
> 
> Below patch only adds error reporting to the mciplay loop.
> Feel free to add the same to the mcirecord loop.
> 
> diff --git a/dlls/mciwave/mciwave.c
> b/dlls/mciwave/mciwave.c
> index cdf9146..fdb6b18 100644
> --- a/dlls/mciwave/mciwave.c
> +++ b/dlls/mciwave/mciwave.c
> @@ -882,6 +882,7 @@ static DWORD WAVE_mciPlay(MCIDEVICEID
> wDevID, DWORD_PTR dwFlags, DWORD_PTR pmt,
>           
> &waveHdr[whidx], waveHdr[whidx].dwBufferLength,
>           
> waveHdr[whidx].dwBytesRecorded);
>      dwRet = waveOutWrite(wmw->hWave,
> &waveHdr[whidx], sizeof(WAVEHDR));
> +    if (dwRet) ERR("Write %d\n", dwRet);
>      left -= count;
>      wmw->dwPosition += count;
>      TRACE("after WODM_WRITE
> dwPosition=%u\n", wmw->dwPosition);
> @@ -893,7 +894,8 @@ static DWORD WAVE_mciPlay(MCIDEVICEID
> wDevID, DWORD_PTR dwFlags, DWORD_PTR pmt,
>      WAVE_mciPlayWaitDone(wmw); /* to
> balance first buffer */
>  
>      /* just to get rid of some race
> conditions between play, stop and pause */
> -    waveOutReset(wmw->hWave);
> +    dwRet = waveOutReset(wmw->hWave);
> +    if (dwRet) ERR("Reset %d\n", dwRet);
>  
>  
>    waveOutUnprepareHeader(wmw->hWave,
> &waveHdr[0], sizeof(WAVEHDR));
>  
>    waveOutUnprepareHeader(wmw->hWave,
> &waveHdr[1], sizeof(WAVEHDR));
> 
> A future patch will abort the loop in case of error. 
> However so far, when creating
> situations that hung on my (non-Fedora) machine (cf. bug
> #20664), the above ERR message
> was never triggered.
> So the cause of random mci time-out on test.winehq may as
> well lay elsewhere.
> 
> Thanks for your help,
>     Jörg Höhle
> 
> 
> 


      



More information about the wine-devel mailing list