]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
Fix send retry on vsocket channel.
authorVMware, Inc <>
Wed, 18 Sep 2013 03:26:35 +0000 (20:26 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Mon, 23 Sep 2013 05:06:59 +0000 (22:06 -0700)
Signed-off-by: Dmitry Torokhov <dtor@vmware.com>
open-vm-tools/lib/rpcChannel/rpcChannel.c
open-vm-tools/lib/rpcChannel/vsockChannel.c

index 96a7869561ac6edf301ddd5e19052612f3f6549e..0c6f53201222ce8bf49f806972875d134a51d817 100644 (file)
@@ -814,6 +814,9 @@ RpcChannel_Send(RpcChannel *chan,
       g_debug(LGPFX "Stop RpcOut channel and try to send again ...\n");
       funcs->stopRpcOut(chan);
       if (RpcChannel_Start(chan)) {
+         /* The channel may get switched from vsocket to backdoor */
+         funcs = chan->funcs;
+         ASSERT(funcs->send);
          ok = funcs->send(chan, data, dataLen, &res, &resLen);
          goto done;
       }
index ad45c56340c49976e99e1c6f1613fa4979aefaab..f12a81debd36f37fb26dbb53b78fb043376a9cbb 100644 (file)
@@ -197,8 +197,7 @@ VSockOutStart(VSockOut *out)      // IN
  *    Close the channel
  *
  * Result
- *    TRUE on success
- *    FALSE on failure
+ *    None
  *
  * Side-effects
  *    None.
@@ -206,7 +205,7 @@ VSockOutStart(VSockOut *out)      // IN
  *-----------------------------------------------------------------------------
  */
 
-static gboolean
+static void
 VSockOutStop(VSockOut *out)    // IN
 {
    ASSERT(out);
@@ -215,8 +214,6 @@ VSockOutStop(VSockOut *out)    // IN
       Socket_Close(out->fd);
       out->fd = INVALID_SOCKET;
    }
-
-   return TRUE;
 }
 
 
@@ -519,7 +516,10 @@ static gboolean
 VSockChannelStopRpcOut(RpcChannel *chan)
 {
    VSockChannel *vsock = chan->_private;
-   return VSockOutStop(vsock->out);
+   VSockOutStop(vsock->out);
+   chan->outStarted = FALSE;
+
+   return TRUE;
 }