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 | 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 | } | ... | ... |