rpc: use single function to send stream messages

In next patches we'll add stream state checks to this
function that applicable to all call paths. This is handy
place because we hold client lock here.

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
This commit is contained in:
Nikolay Shirokovskiy 2019-02-07 15:58:40 +03:00 committed by Michal Privoznik
parent a5445a3706
commit 2fd435b785
4 changed files with 16 additions and 17 deletions

View File

@ -39,8 +39,8 @@ virNetClientRemoteAddrStringSASL;
virNetClientRemoveStream;
virNetClientSendNonBlock;
virNetClientSendNoReply;
virNetClientSendStream;
virNetClientSendWithReply;
virNetClientSendWithReplyStream;
virNetClientSetCloseCallback;
virNetClientSetTLSSession;

View File

@ -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;

View File

@ -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,

View File

@ -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;