aboutsummaryrefslogtreecommitdiff
path: root/audio/audio.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2023-09-22 19:13:44 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2023-10-03 10:29:39 +0200
commitf6061733a96314ccb732efe6c91357d66f8970af (patch)
tree5abdb6f35d1cb78f5a46d4b7c79384070a317066 /audio/audio.c
parentaaa6a6f93dc88f9201b9872fa64a565d52628208 (diff)
audio: allow returning an error from the driver init
An error is already printed by audio_driver_init, but we can make it more precise if the driver can return an Error *. Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'audio/audio.c')
-rw-r--r--audio/audio.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/audio/audio.c b/audio/audio.c
index d4387cb3e2..fdc34a7752 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -33,6 +33,7 @@
#include "qapi/qapi-visit-audio.h"
#include "qapi/qapi-commands-audio.h"
#include "qemu/cutils.h"
+#include "qemu/error-report.h"
#include "qemu/log.h"
#include "qemu/module.h"
#include "qemu/help_option.h"
@@ -1555,7 +1556,9 @@ size_t audio_generic_read(HWVoiceIn *hw, void *buf, size_t size)
static int audio_driver_init(AudioState *s, struct audio_driver *drv,
bool msg, Audiodev *dev)
{
- s->drv_opaque = drv->init(dev);
+ Error *local_err = NULL;
+
+ s->drv_opaque = drv->init(dev, &local_err);
if (s->drv_opaque) {
if (!drv->pcm_ops->get_buffer_in) {
@@ -1572,8 +1575,12 @@ static int audio_driver_init(AudioState *s, struct audio_driver *drv,
s->drv = drv;
return 0;
} else {
- if (msg) {
- dolog("Could not init `%s' audio driver\n", drv->name);
+ if (!msg) {
+ error_free(local_err);
+ } else if (local_err) {
+ error_report_err(local_err);
+ } else {
+ error_report("Could not init `%s' audio driver", drv->name);
}
return -1;
}