Patchwork pty: unbreak libvirt

login
register
mail settings
Submitter Gerd Hoffmann
Date Jan. 3, 2013, 1:23 p.m.
Message ID <1357219383-30748-1-git-send-email-kraxel@redhat.com>
Download mbox | patch
Permalink /patch/209251/
State New
Headers show

Comments

Gerd Hoffmann - Jan. 3, 2013, 1:23 p.m.
Commit 586502189edf9fd0f89a83de96717a2ea826fdb0 breaks libvirt pty
support because it tried to figure the pts name from stderr output.

Fix this by moving the label to the end of the line, this way the
libvirt parser does still recognise the message.  libvirt looks
for "char device redirected to ${ptsname}<whitespace>".

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 qemu-char.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)
Daniel P. Berrange - Jan. 3, 2013, 1:33 p.m.
On Thu, Jan 03, 2013 at 02:23:03PM +0100, Gerd Hoffmann wrote:
> Commit 586502189edf9fd0f89a83de96717a2ea826fdb0 breaks libvirt pty
> support because it tried to figure the pts name from stderr output.
> 
> Fix this by moving the label to the end of the line, this way the
> libvirt parser does still recognise the message.  libvirt looks
> for "char device redirected to ${ptsname}<whitespace>".

FWIW, libvirt was not supposed to be parsing this data still.
We rely on query-chardev to get the PTYs, but we were accidentally
still invoking the stdio parsing code even though we didn't use
the result :-(

This flaw is fixed in latest libvirt GIT.

> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  qemu-char.c |    9 +++++----
>  1 files changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/qemu-char.c b/qemu-char.c
> index 331ad5c..f41788c 100644
> --- a/qemu-char.c
> +++ b/qemu-char.c
> @@ -1012,10 +1012,11 @@ static CharDriverState *qemu_chr_open_pty(QemuOpts *opts)
>      qemu_opt_set(opts, "path", q_ptsname(master_fd));
>  
>      label = qemu_opts_id(opts);
> -    fprintf(stderr, "char device%s%s redirected to %s\n",
> -            label ? " " : "",
> -            label ?: "",
> -            q_ptsname(master_fd));
> +    fprintf(stderr, "char device redirected to %s%s%s%s\n",
> +            q_ptsname(master_fd),
> +            label ? " (label " : "",
> +            label ? label      : "",
> +            label ? ")"        : "");
>  
>      s = g_malloc0(sizeof(PtyCharDriver));
>      chr->opaque = s;


Daniel
Anthony Liguori - Jan. 3, 2013, 6:55 p.m.
"Daniel P. Berrange" <berrange@redhat.com> writes:

> On Thu, Jan 03, 2013 at 02:23:03PM +0100, Gerd Hoffmann wrote:
>> Commit 586502189edf9fd0f89a83de96717a2ea826fdb0 breaks libvirt pty
>> support because it tried to figure the pts name from stderr output.
>> 
>> Fix this by moving the label to the end of the line, this way the
>> libvirt parser does still recognise the message.  libvirt looks
>> for "char device redirected to ${ptsname}<whitespace>".
>
> FWIW, libvirt was not supposed to be parsing this data still.
> We rely on query-chardev to get the PTYs, but we were accidentally
> still invoking the stdio parsing code even though we didn't use
> the result :-(

Thanks for the explanation.  I thought about libvirt before applying
this but had figured it was using query-chardev.

I still think this is a reasonable change to make though even if the
latest libvirt doesn't need it so I'll apply it.

Regards,

Anthony Liguori

>
> This flaw is fixed in latest libvirt GIT.
>
>> 
>> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
>> ---
>>  qemu-char.c |    9 +++++----
>>  1 files changed, 5 insertions(+), 4 deletions(-)
>> 
>> diff --git a/qemu-char.c b/qemu-char.c
>> index 331ad5c..f41788c 100644
>> --- a/qemu-char.c
>> +++ b/qemu-char.c
>> @@ -1012,10 +1012,11 @@ static CharDriverState *qemu_chr_open_pty(QemuOpts *opts)
>>      qemu_opt_set(opts, "path", q_ptsname(master_fd));
>>  
>>      label = qemu_opts_id(opts);
>> -    fprintf(stderr, "char device%s%s redirected to %s\n",
>> -            label ? " " : "",
>> -            label ?: "",
>> -            q_ptsname(master_fd));
>> +    fprintf(stderr, "char device redirected to %s%s%s%s\n",
>> +            q_ptsname(master_fd),
>> +            label ? " (label " : "",
>> +            label ? label      : "",
>> +            label ? ")"        : "");
>>  
>>      s = g_malloc0(sizeof(PtyCharDriver));
>>      chr->opaque = s;
>
>
> 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 :|
Anthony Liguori - Jan. 3, 2013, 7 p.m.
Thanks, applied.

Regards,

Anthony Liguori
Peter Maydell - Jan. 3, 2013, 7:10 p.m.
On 3 January 2013 19:00, Anthony Liguori <aliguori@us.ibm.com> wrote:
> Thanks, applied.

So we now say "char device redirected to /dev/pts/5 (compat_monitor0)"
rather than "char device compat_monitor0 redirected to /dev/pts/5" ?
I think that's a reduction in clarity and it's sad that we have to do it.

I also think that everywhere we have something with a specific
format which we're retaining for the benefit of libvirt we should
have big warning comments saying "Do not change this because
libvirt versions older than X.Y depend upon the exact text".
Otherwise we'll just trip over the same bugs again later.

-- PMM
Anthony Liguori - Jan. 3, 2013, 7:44 p.m.
Peter Maydell <peter.maydell@linaro.org> writes:

> On 3 January 2013 19:00, Anthony Liguori <aliguori@us.ibm.com> wrote:
>> Thanks, applied.
>
> So we now say "char device redirected to /dev/pts/5 (compat_monitor0)"
> rather than "char device compat_monitor0 redirected to /dev/pts/5" ?
> I think that's a reduction in clarity and it's sad that we have to do it.
>
> I also think that everywhere we have something with a specific
> format which we're retaining for the benefit of libvirt we should
> have big warning comments saying "Do not change this because
> libvirt versions older than X.Y depend upon the exact text".
> Otherwise we'll just trip over the same bugs again later.

I don't intend that we keep this forever.   But it's hardly compelling
to do it one way vs. the other so compatibility wins.

Regards,

Anthony Liguori

>
> -- PMM

Patch

diff --git a/qemu-char.c b/qemu-char.c
index 331ad5c..f41788c 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -1012,10 +1012,11 @@  static CharDriverState *qemu_chr_open_pty(QemuOpts *opts)
     qemu_opt_set(opts, "path", q_ptsname(master_fd));
 
     label = qemu_opts_id(opts);
-    fprintf(stderr, "char device%s%s redirected to %s\n",
-            label ? " " : "",
-            label ?: "",
-            q_ptsname(master_fd));
+    fprintf(stderr, "char device redirected to %s%s%s%s\n",
+            q_ptsname(master_fd),
+            label ? " (label " : "",
+            label ? label      : "",
+            label ? ")"        : "");
 
     s = g_malloc0(sizeof(PtyCharDriver));
     chr->opaque = s;