diff --git a/src/libvirt_remote.syms b/src/libvirt_remote.syms index 9a33626ec6..704f7ea101 100644 --- a/src/libvirt_remote.syms +++ b/src/libvirt_remote.syms @@ -39,8 +39,8 @@ virNetClientRemoteAddrStringSASL; virNetClientRemoveStream; virNetClientSendNonBlock; virNetClientSendNoReply; +virNetClientSendStream; virNetClientSendWithReply; -virNetClientSendWithReplyStream; virNetClientSetCloseCallback; virNetClientSetTLSSession; diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c index 7aa52233cc..29c4dc5965 100644 --- a/src/rpc/virnetclient.c +++ b/src/rpc/virnetclient.c @@ -2205,18 +2205,21 @@ int virNetClientSendNonBlock(virNetClientPtr client, /* * @msg: a message allocated on heap or stack * - * Send a message synchronously, and wait for the reply synchronously + * Send a message synchronously, and wait for the reply synchronously if + * message is dummy (just to wait for incoming data) or abort/finish message. * * The caller is responsible for free'ing @msg if it was allocated * on the heap * * Returns 0 on success, -1 on failure */ -int virNetClientSendWithReplyStream(virNetClientPtr client, - virNetMessagePtr msg, - virNetClientStreamPtr st) +int virNetClientSendStream(virNetClientPtr client, + virNetMessagePtr msg, + virNetClientStreamPtr st) { int ret = -1; + bool expectReply = !msg->bufferLength || + msg->header.status != VIR_NET_CONTINUE; virObjectLock(client); @@ -2229,7 +2232,7 @@ int virNetClientSendWithReplyStream(virNetClientPtr client, goto cleanup; } - if (virNetClientSendInternal(client, msg, true, false) < 0) + if (virNetClientSendInternal(client, msg, expectReply, false) < 0) goto cleanup; ret = 0; diff --git a/src/rpc/virnetclient.h b/src/rpc/virnetclient.h index 39a6176d3e..12ac2b51a3 100644 --- a/src/rpc/virnetclient.h +++ b/src/rpc/virnetclient.h @@ -115,9 +115,9 @@ int virNetClientSendNoReply(virNetClientPtr client, int virNetClientSendNonBlock(virNetClientPtr client, virNetMessagePtr msg); -int virNetClientSendWithReplyStream(virNetClientPtr client, - virNetMessagePtr msg, - virNetClientStreamPtr st); +int virNetClientSendStream(virNetClientPtr client, + virNetMessagePtr msg, + virNetClientStreamPtr st); # ifdef WITH_SASL void virNetClientSetSASLSession(virNetClientPtr client, diff --git a/src/rpc/virnetclientstream.c b/src/rpc/virnetclientstream.c index 3b0db526d1..65aa583b0a 100644 --- a/src/rpc/virnetclientstream.c +++ b/src/rpc/virnetclientstream.c @@ -343,17 +343,13 @@ int virNetClientStreamSendPacket(virNetClientStreamPtr st, if (status == VIR_NET_CONTINUE) { if (virNetMessageEncodePayloadRaw(msg, data, nbytes) < 0) goto error; - - if (virNetClientSendNoReply(client, msg) < 0) - goto error; } else { if (virNetMessageEncodePayloadRaw(msg, NULL, 0) < 0) goto error; - - if (virNetClientSendWithReplyStream(client, msg, st) < 0) - goto error; } + if (virNetClientSendStream(client, msg, st) < 0) + goto error; virNetMessageFree(msg); @@ -500,7 +496,7 @@ int virNetClientStreamRecvPacket(virNetClientStreamPtr st, VIR_DEBUG("Dummy packet to wait for stream data"); virObjectUnlock(st); - ret = virNetClientSendWithReplyStream(client, msg, st); + ret = virNetClientSendStream(client, msg, st); virObjectLock(st); virNetMessageFree(msg); @@ -627,7 +623,7 @@ virNetClientStreamSendHole(virNetClientStreamPtr st, &data) < 0) goto cleanup; - if (virNetClientSendNoReply(client, msg) < 0) + if (virNetClientSendStream(client, msg, st) < 0) goto cleanup; ret = 0;