diff --git a/include/sysemu/char.h b/include/sysemu/char.h index 2c3998765453..c4692d5d34c7 100644 --- a/include/sysemu/char.h +++ b/include/sysemu/char.h @@ -151,6 +151,13 @@ CharDriverState *qemu_chr_new(const char *label, const char *filename, */ void qemu_chr_disconnect(CharDriverState *chr); +/** + * @qemu_chr_cleanup: + * + * Delete all chardevs (when leaving qemu) + */ +void qemu_chr_cleanup(void); + /** * @qemu_chr_new_noreplay: * diff --git a/qemu-char.c b/qemu-char.c index 87212b852c3a..0cbb6a1eab01 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -4566,7 +4566,7 @@ void qmp_chardev_remove(const char *id, Error **errp) qemu_chr_delete(chr); } -static void qemu_chr_cleanup(void) +void qemu_chr_cleanup(void) { CharDriverState *chr, *tmp; @@ -4621,8 +4621,6 @@ static void register_types(void) * is specified */ qemu_add_machine_init_done_notifier(&muxes_realize_notify); - - atexit(qemu_chr_cleanup); } type_init(register_types); diff --git a/vl.c b/vl.c index 899dd555a691..2b4e22eb8380 100644 --- a/vl.c +++ b/vl.c @@ -4673,6 +4673,7 @@ int main(int argc, char **argv, char **envp) #ifdef CONFIG_TPM tpm_cleanup(); #endif + qemu_chr_cleanup(); return 0; }