aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rpc/virnetclient.c10
-rw-r--r--src/rpc/virnetclientstream.c1
2 files changed, 11 insertions, 0 deletions
diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c
index 055361d0d..b2c528a10 100644
--- a/src/rpc/virnetclient.c
+++ b/src/rpc/virnetclient.c
@@ -627,6 +627,15 @@ static int virNetClientCallDispatchStream(virNetClientPtr client)
case VIR_NET_CONTINUE: {
if (virNetClientStreamQueuePacket(st, &client->msg) < 0)
return -1;
+
+ if (thecall && thecall->expectReply) {
+ if (thecall->msg->header.status == VIR_NET_CONTINUE) {
+ VIR_DEBUG("Got a synchronous confirm");
+ thecall->mode = VIR_NET_CLIENT_MODE_COMPLETE;
+ } else {
+ VIR_DEBUG("Not completing call with status %d", thecall->msg->header.status);
+ }
+ }
return 0;
}
@@ -1189,6 +1198,7 @@ int virNetClientSend(virNetClientPtr client,
int ret = -1;
if (expectReply &&
+ (msg->bufferLength != 0) &&
(msg->header.status == VIR_NET_CONTINUE)) {
virNetError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Attempt to send an asynchronous message with a synchronous reply"));
diff --git a/src/rpc/virnetclientstream.c b/src/rpc/virnetclientstream.c
index 2cc84d40d..4cd02952b 100644
--- a/src/rpc/virnetclientstream.c
+++ b/src/rpc/virnetclientstream.c
@@ -400,6 +400,7 @@ int virNetClientStreamRecvPacket(virNetClientStreamPtr st,
msg->header.type = VIR_NET_STREAM;
msg->header.serial = st->serial;
msg->header.proc = st->proc;
+ msg->header.status = VIR_NET_CONTINUE;
VIR_DEBUG("Dummy packet to wait for stream data");
virMutexUnlock(&st->lock);