From 46d1324e47ce085f62b4129901f6dbe215c58291 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 28 Jan 2009 22:00:32 +0000 Subject: [PATCH] Stopping reading off wire after 1 complete RPC message is received --- ChangeLog | 5 +++++ src/remote_internal.c | 19 +++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index ef17590f06..fff391c7cf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Jan 28 21:55:11 GMT 2009 Daniel P.Berrange + + * 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 Fix bogus valgrind memory leak warnings diff --git a/src/remote_internal.c b/src/remote_internal.c index 6f6eb744c2..c8457ea925 100644 --- a/src/remote_internal.c +++ b/src/remote_internal.c @@ -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; } } }