Commit 44a095a77ce7a4708e275df727667898e1e07c19

Authored by bellard
1 parent 15b61470

mmap audio fix (malc)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1138 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 16 additions and 15 deletions
audio/ossaudio.c
... ... @@ -370,29 +370,30 @@ static int oss_hw_init (HWVoice *hw, int freq, int nchannels, audfmt_e fmt)
370 370 if (oss->pcm_buf == MAP_FAILED) {
371 371 dolog ("Failed to mmap OSS device\nReason: %s\n",
372 372 errstr ());
373   - } else for (;;) {
  373 + } else {
374 374 int err;
375 375 int trig = 0;
376 376 if (ioctl (oss->fd, SNDCTL_DSP_SETTRIGGER, &trig) < 0) {
377 377 dolog ("SNDCTL_DSP_SETTRIGGER 0 failed\nReason: %s\n",
378 378 errstr ());
379   - goto fail;
380 379 }
381   -
382   - trig = PCM_ENABLE_OUTPUT;
383   - if (ioctl (oss->fd, SNDCTL_DSP_SETTRIGGER, &trig) < 0) {
384   - dolog ("SNDCTL_DSP_SETTRIGGER PCM_ENABLE_OUTPUT failed\n"
385   - "Reason: %s\n", errstr ());
386   - goto fail;
  380 + else {
  381 + trig = PCM_ENABLE_OUTPUT;
  382 + if (ioctl (oss->fd, SNDCTL_DSP_SETTRIGGER, &trig) < 0) {
  383 + dolog ("SNDCTL_DSP_SETTRIGGER PCM_ENABLE_OUTPUT failed\n"
  384 + "Reason: %s\n", errstr ());
  385 + }
  386 + else {
  387 + oss->mmapped = 1;
  388 + }
387 389 }
388   - oss->mmapped = 1;
389   - break;
390 390  
391   - fail:
392   - err = munmap (oss->pcm_buf, hw->bufsize);
393   - if (err) {
394   - dolog ("Failed to unmap OSS device\nReason: %s\n",
395   - errstr ());
  391 + if (!oss->mmapped) {
  392 + err = munmap (oss->pcm_buf, hw->bufsize);
  393 + if (err) {
  394 + dolog ("Failed to unmap OSS device\nReason: %s\n",
  395 + errstr ());
  396 + }
396 397 }
397 398 }
398 399 }
... ...