]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Stopping reading off wire after 1 complete RPC message is received
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 28 Jan 2009 22:00:32 +0000 (22:00 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Wed, 28 Jan 2009 22:00:32 +0000 (22:00 +0000)
ChangeLog
src/remote_internal.c

index ef17590f06a25e0a0719f04a80d89fcfdc1b91f2..fff391c7cf31490bc4afcd58e40e71da06924571 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Jan 28 21:55:11 GMT 2009 Daniel P.Berrange <berrange@redhat.com>
+
+       * src/remote_internal.c: Stop reading data off wire once
+       a single complete message is available.
+
 Wed Jan 28 21:53:11 GMT 2009 Daniel P.Berrange <berrange@redhat.com>
 
        Fix bogus valgrind memory leak warnings
index 6f6eb744c22e8dfde18b7549237f43a0f2364922..c8457ea92521d888afc0dcb9e7107afdd374f788 100644 (file)
@@ -6135,12 +6135,27 @@ processCallRecv(virConnectPtr conn, struct private_data *priv,
         if (priv->bufferOffset == priv->bufferLength) {
             if (priv->bufferOffset == 4) {
                 ret = processCallRecvLen(conn, priv, in_open);
+                if (ret < 0)
+                    return -1;
+
+                /*
+                 * We'll carry on around the loop to immediately
+                 * process the message body, because it has probably
+                 * already arrived. Worst case, we'll get EAGAIN on
+                 * next iteration.
+                 */
             } else {
                 ret = processCallRecvMsg(conn, priv, in_open);
                 priv->bufferOffset = priv->bufferLength = 0;
+                /*
+                 * We've completed one call, so return even
+                 * though there might still be more data on
+                 * the wire. We need to actually let the caller
+                 * deal with this arrived message to keep good
+                 * response, and also to correctly handle EOF.
+                 */
+                return ret;
             }
-            if (ret < 0)
-                return -1;
         }
     }
 }