[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-commits] [COMMIT 301901b] oss/alsa: Do not invoke UB described in
From: |
Anthony Liguori |
Subject: |
[Qemu-commits] [COMMIT 301901b] oss/alsa: Do not invoke UB described in 7.15.1.1 |
Date: |
Thu, 01 Oct 2009 22:39:04 -0000 |
From: malc <address@hidden>
Additional argument (whether to try poll mode) is only passed with
VOICE_ENABLE command.
Thanks to Markus Armbruster for noticing the potential breakage.
diff --git a/audio/alsaaudio.c b/audio/alsaaudio.c
index a4baebc..b8de3a7 100644
--- a/audio/alsaaudio.c
+++ b/audio/alsaaudio.c
@@ -861,22 +861,25 @@ static int alsa_voice_ctl (snd_pcm_t *handle, const char
*typ, int pause)
static int alsa_ctl_out (HWVoiceOut *hw, int cmd, ...)
{
- va_list ap;
- int poll_mode;
ALSAVoiceOut *alsa = (ALSAVoiceOut *) hw;
- va_start (ap, cmd);
- poll_mode = va_arg (ap, int);
- va_end (ap);
-
switch (cmd) {
case VOICE_ENABLE:
- ldebug ("enabling voice\n");
- if (poll_mode && alsa_poll_out (hw)) {
- poll_mode = 0;
+ {
+ va_list ap;
+ int poll_mode;
+
+ va_start (ap, cmd);
+ poll_mode = va_arg (ap, int);
+ va_end (ap);
+
+ ldebug ("enabling voice\n");
+ if (poll_mode && alsa_poll_out (hw)) {
+ poll_mode = 0;
+ }
+ hw->poll_mode = poll_mode;
+ return alsa_voice_ctl (alsa->handle, "playback", 0);
}
- hw->poll_mode = poll_mode;
- return alsa_voice_ctl (alsa->handle, "playback", 0);
case VOICE_DISABLE:
ldebug ("disabling voice\n");
diff --git a/audio/ossaudio.c b/audio/ossaudio.c
index 946a9dc..dae25e9 100644
--- a/audio/ossaudio.c
+++ b/audio/ossaudio.c
@@ -583,34 +583,37 @@ static int oss_init_out (HWVoiceOut *hw, struct
audsettings *as)
static int oss_ctl_out (HWVoiceOut *hw, int cmd, ...)
{
int trig;
- va_list ap;
- int poll_mode;
OSSVoiceOut *oss = (OSSVoiceOut *) hw;
- va_start (ap, cmd);
- poll_mode = va_arg (ap, int);
- va_end (ap);
-
switch (cmd) {
case VOICE_ENABLE:
- ldebug ("enabling voice\n");
- if (poll_mode && oss_poll_out (hw)) {
- poll_mode = 0;
- }
- hw->poll_mode = poll_mode;
+ {
+ va_list ap;
+ int poll_mode;
- if (!oss->mmapped) {
- return 0;
- }
+ va_start (ap, cmd);
+ poll_mode = va_arg (ap, int);
+ va_end (ap);
- audio_pcm_info_clear_buf (&hw->info, oss->pcm_buf, hw->samples);
- trig = PCM_ENABLE_OUTPUT;
- if (ioctl (oss->fd, SNDCTL_DSP_SETTRIGGER, &trig) < 0) {
- oss_logerr (
- errno,
- "SNDCTL_DSP_SETTRIGGER PCM_ENABLE_OUTPUT failed\n"
- );
- return -1;
+ ldebug ("enabling voice\n");
+ if (poll_mode && oss_poll_out (hw)) {
+ poll_mode = 0;
+ }
+ hw->poll_mode = poll_mode;
+
+ if (!oss->mmapped) {
+ return 0;
+ }
+
+ audio_pcm_info_clear_buf (&hw->info, oss->pcm_buf, hw->samples);
+ trig = PCM_ENABLE_OUTPUT;
+ if (ioctl (oss->fd, SNDCTL_DSP_SETTRIGGER, &trig) < 0) {
+ oss_logerr (
+ errno,
+ "SNDCTL_DSP_SETTRIGGER PCM_ENABLE_OUTPUT failed\n"
+ );
+ return -1;
+ }
}
break;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-commits] [COMMIT 301901b] oss/alsa: Do not invoke UB described in 7.15.1.1,
Anthony Liguori <=