> From: Marc-André Lureau<
marcandre.lureau@redhat.com>
>
> If you specify a known backend but it isn't compiled in, or failed to
> initialize, you get a simple warning and the "none" backend as a
> fallback, and QEMU runs happily:
>
> $ qemu-system-x86_64 -audiodev id=audio,driver=dsound
> audio: Unknown audio driver `dsound'
> audio: warning: Using timer based audio emulation
> ...
>
> Instead, QEMU should fail to start:
> $ qemu-system-x86_64 -audiodev id=audio,driver=dsound
> audio: Unknown audio driver `dsound'
> $
>
> Resolves:
>
https://bugzilla.redhat.com/show_bug.cgi?id=1983493
>
> Signed-off-by: Marc-André Lureau<
marcandre.lureau@redhat.com>
> ---
> audio/audio.h | 2 +-
> audio/audio.c | 14 +++++++++++---
> softmmu/vl.c | 4 +++-
> 3 files changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/audio/audio.h b/audio/audio.h
> index b5e17cd218..27e67079a0 100644
> --- a/audio/audio.h
> +++ b/audio/audio.h
> @@ -170,7 +170,7 @@ void audio_sample_from_uint64(void *samples, int pos,
>
> void audio_define(Audiodev *audio);
> void audio_parse_option(const char *opt);
> -void audio_init_audiodevs(void);
> +bool audio_init_audiodevs(void);
> void audio_legacy_help(void);
>
> AudioState *audio_state_by_name(const char *name);
> diff --git a/audio/audio.c b/audio/audio.c
> index a02f3ce5c6..76b8735b44 100644
> --- a/audio/audio.c
> +++ b/audio/audio.c
> @@ -1743,7 +1743,6 @@ static AudioState *audio_init(Audiodev *dev, const char *name)
> atexit(audio_cleanup);
> atexit_registered = true;
> }
> - QTAILQ_INSERT_TAIL(&audio_states, s, list);
>
> s->ts = timer_new_ns(QEMU_CLOCK_VIRTUAL, audio_timer, s);
>
> @@ -1769,6 +1768,10 @@ static AudioState *audio_init(Audiodev *dev, const char *name)
> } else {
> dolog ("Unknown audio driver `%s'\n", drvname);
> }
> + if (!done) {
> + free_audio_state(s);
> + return NULL;
Hi Marc-André,
I don't understand why you move the QTAILQ_INSERT_TAIL(&audio_states, s,
list) macro down. Without this you don't need the additional
free_audio_state() call. audio_cleanup() takes care to free the audio state.