]> 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)
committerJiri Denemark <jdenemar@redhat.com>
Wed, 13 Jun 2012 14:01:27 +0000 (16:01 +0200)
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.

src/rpc/virnetclient.c

index 033fda6e193f37db7050c4f7bde2ddc1eef133db..49d238e273bcaafc34bf96409cf45eb9aab8a579 100644 (file)
@@ -1347,6 +1347,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) {
@@ -1375,15 +1381,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;