qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/2] monitor: Reset HMP mon->rs on CHR_EVENT_CLO


From: Markus Armbruster
Subject: Re: [Qemu-devel] [PATCH 1/2] monitor: Reset HMP mon->rs on CHR_EVENT_CLOSED
Date: Fri, 12 Sep 2014 08:58:23 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux)

Stratos Psomadakis <address@hidden> writes:

> Commit cdaa86a54 ("Add G_IO_HUP handler for socket chardev") exposed a
> bug in the way the HMP monitor handles its input.  When a client closes
> the connection to the monitor, tcp_chr_read() will catch the HUP
> 'signal' and call tcp_chr_disconnect() to close the server-side
> connection too.

Your wording suggests SIGUP, but that's misleading.  Suggest
"tcp_chr_read() will detect the G_IO_HUP condition, and call".

>                 Due to the fact that monitor reads 1 byte at a time (for
> each tcp_chr_read()), the monitor readline state / buffers can be left
> in an inconsistent state (i.e. a half-finished command).

The state is not really inconsistent, there's just junk left in
rs->cmd_buf[].

>                                                          Thus, without
> calling readline_restart() on mon->rs upon CHR_EVENT_CLOSED, future HMP
> commands will fail.

To make sure I understand you correctly: when you connect again, any
leftover junk is prepended to your input, which messes up your first
command.  Correct?

> Signed-off-by: Stratos Psomadakis <address@hidden>
> Signed-off-by: Dimitris Aragiorgis <address@hidden>
> ---
>  monitor.c |    1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/monitor.c b/monitor.c
> index 34cee74..7857300 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -5252,6 +5252,7 @@ static void monitor_event(void *opaque, int event)
>          break;
>  
>      case CHR_EVENT_CLOSED:
> +        readline_restart(mon->rs);
>          mon_refcount--;
>          monitor_fdsets_cleanup();
>          break;

Patch looks good to me.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]