winmm/tests: Allow more margin in the test_asyncWAVE() playback check.

Joerg-Cyril.Hoehle at Joerg-Cyril.Hoehle at
Tue Jan 22 03:55:01 CST 2013


thank you for helping remove timing-caused flakiness from the tests.

I believe you forgot to test your patch in Wine(!). The test
+    ok(400 <= p2 && p2 <= 600, "%ums is not in the expected 400-600ms range\n", p2);
should fail in every version of Wine.

Ironically, the reason is mentioned in your patch:
     /* Give Wine's asynchronous thread time to start up.  Furthermore,
      * it uses 3 buffers per second, so that the positions reported
      * will be 333ms, 667ms etc. at best. */

IIRC, the first non-null position reported by Wine is 667ms, because
it successfully queues two 333ms buffers to waveOut.

I suggest adding a todo_wine plus an additional
ok(0<p2 && strcmp(buf,"2000")) that Wine won't fail.
And I'd decrease the sleep to e.g. 200 and 100 <= p2 && p2 <= 300
All those times sum up, the winmm test run long enough already.

MCIWave should use winmm:waveOutGetPosition while playing, however
the MCI devices hardly have any decent thread-safety and the construct
    if(status == MODE_PLAYING)
         waveOutGetPosition(hWave, &pos)
    else pos = stopped_pos;
is unsafe, as the player may have exited meanwhile and closed hWave.

It's a compatibility bug since day one of mciwave in git history that
the position increments 3 times per second only.  Yet so far,
no app seems to have been bothered.

	Jörg Höhle

More information about the wine-devel mailing list