Commit 44a095a77ce7a4708e275df727667898e1e07c19
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 | } |