[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 1/3] char: clean up remaining chardevs when leav
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH 1/3] char: clean up remaining chardevs when leaving |
Date: |
Thu, 16 Jun 2016 14:19:30 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.0 |
On 16/06/2016 13:17, address@hidden wrote:
> From: Marc-André Lureau <address@hidden>
>
> This helps to remove various chardev resources leaks when leaving qemu.
>
> Signed-off-by: Marc-André Lureau <address@hidden>
> ---
> include/sysemu/char.h | 7 +++++++
> qemu-char.c | 9 +++++++++
> vl.c | 1 +
> 3 files changed, 17 insertions(+)
>
> diff --git a/include/sysemu/char.h b/include/sysemu/char.h
> index 372a6fd..8954be1 100644
> --- a/include/sysemu/char.h
> +++ b/include/sysemu/char.h
> @@ -382,6 +382,13 @@ void qemu_chr_be_write_impl(CharDriverState *s, uint8_t
> *buf, int len);
> */
> void qemu_chr_be_event(CharDriverState *s, int event);
>
> +/**
> + * @qemu_chr_cleanup:
> + *
> + * Delete all chardevs (when leaving qemu)
> + */
> +void qemu_chr_cleanup(void);
> +
> void qemu_chr_add_handlers(CharDriverState *s,
> IOCanReadHandler *fd_can_read,
> IOReadHandler *fd_read,
> diff --git a/qemu-char.c b/qemu-char.c
> index b13ecbb..bf098a1 100644
> --- a/qemu-char.c
> +++ b/qemu-char.c
> @@ -4088,6 +4088,15 @@ CharDriverState *qemu_chr_find(const char *name)
> return NULL;
> }
>
> +void qemu_chr_cleanup(void)
> +{
> + CharDriverState *chr;
> +
> + QTAILQ_FOREACH(chr, &chardevs, next) {
> + qemu_chr_delete(chr);
> + }
> +}
> +
> QemuOptsList qemu_chardev_opts = {
> .name = "chardev",
> .implied_opt_name = "backend",
> diff --git a/vl.c b/vl.c
> index 45eff56..ac92b1d 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -4628,6 +4628,7 @@ int main(int argc, char **argv, char **envp)
> #ifdef CONFIG_TPM
> tpm_cleanup();
> #endif
> + qemu_chr_cleanup();
Given the amount of exit(1) calls surviving in QEMU, it's probably
better to use atexit here.
Paolo
> return 0;
> }
>