aboutsummaryrefslogtreecommitdiff
path: root/audio
diff options
context:
space:
mode:
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2004-11-14 16:02:51 +0000
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2004-11-14 16:02:51 +0000
commit44a095a77ce7a4708e275df727667898e1e07c19 (patch)
tree84d04cf9ff1fd61679acd7590a6ce11a836fba1a /audio
parent15b614700062dde8801762b1cfd4717a63a2cfd9 (diff)
mmap audio fix (malc)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1138 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'audio')
-rw-r--r--audio/ossaudio.c31
1 files 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 ());
+ }
}
}
}