From 086c3fbab122659b87b6e23e2d45e3d6e986d51e Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 13 Jun 2012 10:54:02 +0100 Subject: [PATCH] client rpc: Fix error checking after poll() 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 | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c index d8bb4174c0..1231a7f5ae 100644 --- a/src/rpc/virnetclient.c +++ b/src/rpc/virnetclient.c @@ -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;