]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
client rpc: Fix error checking after poll()
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 13 Jun 2012 09:54:02 +0000 (10:54 +0100)
committerCole Robinson <crobinso@redhat.com>
Mon, 13 Aug 2012 01:15:47 +0000 (21:15 -0400)
First 'poll' can't return EWOULDBLOCK, and second, we're checking errno
so far away from the poll() call that we've probably already trashed the
original errno value.
(cherry picked from commit 5d490603a6d60298162cbd32ec45f736b58929fb)

src/rpc/virnetclient.c

index d8bb4174c0df8ea21fd63e64830e2938b5490b5b..1231a7f5ae6f408c3b8be173a0edcb6f50255e74 100644 (file)
@@ -1335,6 +1335,12 @@ static int virNetClientIOEventLoop(virNetClientPtr client,
 
         virNetClientLock(client);
 
+        if (ret < 0) {
+            virReportSystemError(errno,
+                                 "%s", _("poll on socket failed"));
+            goto error;
+        }
+
         if (virKeepAliveTrigger(client->keepalive, &msg)) {
             client->wantClose = true;
         } else if (msg && virNetClientQueueNonBlocking(client, msg) < 0) {
@@ -1363,15 +1369,6 @@ static int virNetClientIOEventLoop(virNetClientPtr client,
             }
         }
 
-        if (ret < 0) {
-            /* XXX what's this dubious errno check doing ? */
-            if (errno == EWOULDBLOCK)
-                continue;
-            virReportSystemError(errno,
-                                 "%s", _("poll on socket failed"));
-            goto error;
-        }
-
         if (fds[0].revents & POLLOUT) {
             if (virNetClientIOHandleOutput(client) < 0)
                 goto error;