]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
rpc: use single function to send stream messages
authorNikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
Thu, 7 Feb 2019 12:58:40 +0000 (15:58 +0300)
committerMichal Privoznik <mprivozn@redhat.com>
Fri, 8 Feb 2019 15:51:45 +0000 (16:51 +0100)
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>
src/libvirt_remote.syms
src/rpc/virnetclient.c
src/rpc/virnetclient.h
src/rpc/virnetclientstream.c

index 9a33626ec6fed9337f7ec9dc3bb37ee8a94b4c8f..704f7ea1012d813333f3cbad69508fef31704568 100644 (file)
@@ -39,8 +39,8 @@ virNetClientRemoteAddrStringSASL;
 virNetClientRemoveStream;
 virNetClientSendNonBlock;
 virNetClientSendNoReply;
+virNetClientSendStream;
 virNetClientSendWithReply;
-virNetClientSendWithReplyStream;
 virNetClientSetCloseCallback;
 virNetClientSetTLSSession;
 
index 7aa52233ccc1a295b93c3d17c6c0cd81d92e9ef1..29c4dc59655cfbb60362618c3b7e98623000bc79 100644 (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;
index 39a6176d3ea3ac35660bc4f46fa67c16d3710d91..12ac2b51a320d3f3da433df1818264c817c5f77a 100644 (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,
index 3b0db526d1ba0e2e7a5b59ebef7e18be534a6b0c..65aa583b0a1d8d8eb52d20ecd40f1338199cd888 100644 (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;