[libvirt] [PATCH 05/10] virsh: fix console stream error reporting

Daniel P. Berrange berrange at redhat.com
Tue Oct 18 10:20:11 UTC 2011


On Wed, Oct 12, 2011 at 03:43:15PM +0200, Peter Krempa wrote:
> This patch subscribes the console stream event callback to handle errors
> (and stream abortion) from the daemon. The functionality was (partly)
> implemented in the callback, but the error events were not registered.
> ---
>  tools/console.c |   21 ++++++++++++++-------
>  1 files changed, 14 insertions(+), 7 deletions(-)
> 
> diff --git a/tools/console.c b/tools/console.c
> index 0f85bc7..3913c42 100644
> --- a/tools/console.c
> +++ b/tools/console.c
> @@ -109,6 +109,12 @@ virConsoleEventOnStream(virStreamPtr st,
>  {
>      virConsolePtr con = opaque;
> 
> +    if (events & VIR_STREAM_EVENT_ERROR ||
> +        events & VIR_STREAM_EVENT_HANGUP) {
> +        virConsoleShutdown(con);
> +        return;
> +    }

There is already code for this further down in virConsoleEventOnStream.

The check for ERROR/HANGUP should come *last* in the method, because
you might also have READABLE set at the same time. We need to make
sure we read any final data.

>      if (events & VIR_STREAM_EVENT_READABLE) {
>          size_t avail = con->streamToTerminal.length -
>              con->streamToTerminal.offset;
> @@ -169,12 +175,10 @@ virConsoleEventOnStream(virStreamPtr st,
>      }
>      if (!con->terminalToStream.offset)
>          virStreamEventUpdateCallback(con->st,
> -                                     VIR_STREAM_EVENT_READABLE);
> +                                     ( VIR_STREAM_EVENT_READABLE |
> +                                       VIR_STREAM_EVENT_HANGUP |
> +                                       VIR_STREAM_EVENT_ERROR ));
> 
> -    if (events & VIR_STREAM_EVENT_ERROR ||
> -        events & VIR_STREAM_EVENT_HANGUP) {
> -        virConsoleShutdown(con);
> -    }
>  }
> 
>  static void
> @@ -346,7 +350,9 @@ int vshRunConsole(virDomainPtr dom, const char *dev_name)
>                                           NULL);
> 
>      virStreamEventAddCallback(con->st,
> -                              VIR_STREAM_EVENT_READABLE,
> +                              (VIR_STREAM_EVENT_READABLE |
> +                               VIR_STREAM_EVENT_HANGUP |
> +                               VIR_STREAM_EVENT_ERROR),
>                                virConsoleEventOnStream,
>                                con,
>                                NULL);

As with the other patch, this is not required. HANGUP/ERROR are
always enabled, if you have READABLE or WRITABLE set.

> @@ -356,7 +362,8 @@ int vshRunConsole(virDomainPtr dom, const char *dev_name)
>              break;
>      }
> 
> -    ret = 0;
> +    if (!virGetLastError())
> +        ret = 0;

This looks like the only bit we might need, but I'm not entirely
convinced. If the user aborts the console with Ctrl-], then I don't
think we need to print the error from virStreamAbort. They know
they just aborted it


Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list