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,29 +370,30 @@ static int oss_hw_init (HWVoice *hw, int freq, int nchannels, audfmt_e fmt)
370 if (oss->pcm_buf == MAP_FAILED) { 370 if (oss->pcm_buf == MAP_FAILED) {
371 dolog ("Failed to mmap OSS device\nReason: %s\n", 371 dolog ("Failed to mmap OSS device\nReason: %s\n",
372 errstr ()); 372 errstr ());
373 - } else for (;;) { 373 + } else {
374 int err; 374 int err;
375 int trig = 0; 375 int trig = 0;
376 if (ioctl (oss->fd, SNDCTL_DSP_SETTRIGGER, &trig) < 0) { 376 if (ioctl (oss->fd, SNDCTL_DSP_SETTRIGGER, &trig) < 0) {
377 dolog ("SNDCTL_DSP_SETTRIGGER 0 failed\nReason: %s\n", 377 dolog ("SNDCTL_DSP_SETTRIGGER 0 failed\nReason: %s\n",
378 errstr ()); 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 }