From: Marc-André Lureau Date: Mon, 13 Oct 2025 19:53:06 +0000 (+0400) Subject: audio: keep vmstate handle with AudioState X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7423b3aae67d3d089bef13bad678dbb60a3f432d;p=thirdparty%2Fqemu.git audio: keep vmstate handle with AudioState QOM-ification continues. Signed-off-by: Marc-André Lureau Reviewed-by: Philippe Mathieu-Daudé --- diff --git a/audio/audio.c b/audio/audio.c index 155809dee7..4c3c3fd52f 100644 --- a/audio/audio.c +++ b/audio/audio.c @@ -1622,6 +1622,9 @@ static void audio_state_init(Object *obj) QLIST_INIT(&s->hw_head_in); QLIST_INIT(&s->cap_head); s->ts = timer_new_ns(QEMU_CLOCK_VIRTUAL, audio_timer, s); + + s->vmse = qemu_add_vm_change_state_handler(audio_vm_change_state_handler, s); + assert(s->vmse != NULL); } static void audio_state_finalize(Object *obj) @@ -1671,6 +1674,11 @@ static void audio_state_finalize(Object *obj) timer_free(s->ts); s->ts = NULL; } + + if (s->vmse) { + qemu_del_vm_change_state_handler(s->vmse); + s->vmse = NULL; + } } static Object *get_audiodevs_root(void) @@ -1735,7 +1743,6 @@ static AudioState *audio_init(Audiodev *dev, Error **errp) { int done = 0; const char *drvname; - VMChangeStateEntry *vmse; AudioState *s; struct audio_driver *driver; @@ -1775,9 +1782,6 @@ static AudioState *audio_init(Audiodev *dev, Error **errp) } } - vmse = qemu_add_vm_change_state_handler (audio_vm_change_state_handler, s); - assert(vmse != NULL); - if (!object_property_try_add_child(get_audiodevs_root(), dev->id, OBJECT(s), errp)) { goto out; } diff --git a/audio/audio_int.h b/audio/audio_int.h index 4187a2dbfc..4a4d69f2bf 100644 --- a/audio/audio_int.h +++ b/audio/audio_int.h @@ -235,6 +235,7 @@ typedef struct AudioState { bool timer_running; uint64_t timer_last; + VMChangeStateEntry *vmse; } AudioState; extern const struct mixeng_volume nominal_volume;