diff --git a/include/sysemu/char.h b/include/sysemu/char.h index edf76693d9..aff193f080 100644 --- a/include/sysemu/char.h +++ b/include/sysemu/char.h @@ -128,10 +128,18 @@ CharDriverState *qemu_chr_new(const char *label, const char *filename, /** * @qemu_chr_delete: * - * Destroy a character backend. + * Destroy a character backend and remove it from the list of + * identified character backends. */ void qemu_chr_delete(CharDriverState *chr); +/** + * @qemu_chr_free: + * + * Destroy a character backend. + */ +void qemu_chr_free(CharDriverState *chr); + /** * @qemu_chr_fe_set_echo: * diff --git a/qemu-char.c b/qemu-char.c index 908e7124eb..c4eb4eea31 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -3876,9 +3876,8 @@ void qemu_chr_fe_release(CharDriverState *s) s->avail_connections++; } -void qemu_chr_delete(CharDriverState *chr) +void qemu_chr_free(CharDriverState *chr) { - QTAILQ_REMOVE(&chardevs, chr, next); if (chr->chr_close) { chr->chr_close(chr); } @@ -3888,6 +3887,12 @@ void qemu_chr_delete(CharDriverState *chr) g_free(chr); } +void qemu_chr_delete(CharDriverState *chr) +{ + QTAILQ_REMOVE(&chardevs, chr, next); + qemu_chr_free(chr); +} + ChardevInfoList *qmp_query_chardev(Error **errp) { ChardevInfoList *chr_list = NULL;