qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] Patch 9894dc0cdcc broke something
@ 2018-02-22 11:38 Aleksey Kuleshov
  2018-02-22 11:45 ` Daniel P. Berrangé
  2018-02-22 12:15 ` Daniel P. Berrangé
  0 siblings, 2 replies; 4+ messages in thread
From: Aleksey Kuleshov @ 2018-02-22 11:38 UTC (permalink / raw)
  To: qemu-devel, Daniel P. Berrange, Paolo Bonzini

Hello!

I hit unexpected disconnections because of this patch:

commit 9894dc0cdcc397ee5b26370bc53da6d360a363c2
Author: Daniel P. Berrange <berrange@redhat.com>
Date:   Tue Jan 19 11:14:29 2016 +0000

    char: convert from GIOChannel to QIOChannel
    
    In preparation for introducing TLS support to the TCP chardev
    backend, convert existing chardev code from using GIOChannel
    to QIOChannel. This simplifies the chardev code by removing
    most of the OS platform conditional code for dealing with
    file descriptor passing.
    
    Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
    Message-Id: <1453202071-10289-3-git-send-email-berrange@redhat.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

breaks tcp_chr_read:

-static gboolean tcp_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
+static gboolean tcp_chr_read(QIOChannel *chan, GIOCondition cond, void *opaque)
 {
     CharDriverState *chr = opaque;
     TCPCharDriver *s = chr->opaque;
@@ -2938,9 +2801,7 @@ static gboolean tcp_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
     if (len > s->max_size)
         len = s->max_size;
     size = tcp_chr_recv(chr, (void *)buf, len);
-    if (size == 0 ||
-        (size < 0 &&
-         socket_error() != EAGAIN && socket_error() != EWOULDBLOCK)) {
+    if (size == 0 || size == -1) {
         /* connection closed */
         tcp_chr_disconnect(chr);
     } else if (size > 0) {

since tcp_chr_recv returns -1 on blocking:

static ssize_t tcp_chr_recv(Chardev *chr, char *buf, size_t len)
{
...
    if (ret == QIO_CHANNEL_ERR_BLOCK) {
        errno = EAGAIN;
        ret = -1;
    } else if (ret == -1) {
        errno = EIO;
    }

This patch not just converts GIOChannel to QIOChannel
it also changes the logic which is not mentioned in the commit message.

Fix please :)

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-02-22 12:15 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-02-22 11:38 [Qemu-devel] Patch 9894dc0cdcc broke something Aleksey Kuleshov
2018-02-22 11:45 ` Daniel P. Berrangé
2018-02-22 12:03   ` Aleksey Kuleshov
2018-02-22 12:15 ` Daniel P. Berrangé

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).