From 44a095a77ce7a4708e275df727667898e1e07c19 Mon Sep 17 00:00:00 2001 From: bellard Date: Sun, 14 Nov 2004 16:02:51 +0000 Subject: mmap audio fix (malc) git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1138 c046a42c-6fe2-441c-8c8c-71466251a162 --- audio/ossaudio.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/audio/ossaudio.c b/audio/ossaudio.c index 79b1e8a5b3..ee897c9dd7 100644 --- a/audio/ossaudio.c +++ b/audio/ossaudio.c @@ -370,29 +370,30 @@ static int oss_hw_init (HWVoice *hw, int freq, int nchannels, audfmt_e fmt) if (oss->pcm_buf == MAP_FAILED) { dolog ("Failed to mmap OSS device\nReason: %s\n", errstr ()); - } else for (;;) { + } else { int err; int trig = 0; if (ioctl (oss->fd, SNDCTL_DSP_SETTRIGGER, &trig) < 0) { dolog ("SNDCTL_DSP_SETTRIGGER 0 failed\nReason: %s\n", errstr ()); - goto fail; } - - trig = PCM_ENABLE_OUTPUT; - if (ioctl (oss->fd, SNDCTL_DSP_SETTRIGGER, &trig) < 0) { - dolog ("SNDCTL_DSP_SETTRIGGER PCM_ENABLE_OUTPUT failed\n" - "Reason: %s\n", errstr ()); - goto fail; + else { + trig = PCM_ENABLE_OUTPUT; + if (ioctl (oss->fd, SNDCTL_DSP_SETTRIGGER, &trig) < 0) { + dolog ("SNDCTL_DSP_SETTRIGGER PCM_ENABLE_OUTPUT failed\n" + "Reason: %s\n", errstr ()); + } + else { + oss->mmapped = 1; + } } - oss->mmapped = 1; - break; - fail: - err = munmap (oss->pcm_buf, hw->bufsize); - if (err) { - dolog ("Failed to unmap OSS device\nReason: %s\n", - errstr ()); + if (!oss->mmapped) { + err = munmap (oss->pcm_buf, hw->bufsize); + if (err) { + dolog ("Failed to unmap OSS device\nReason: %s\n", + errstr ()); + } } } } -- cgit v1.2.3