From: VMware, Inc <> Date: Wed, 18 Sep 2013 03:26:35 +0000 (-0700) Subject: Fix send retry on vsocket channel. X-Git-Tag: 2013.09.16-1328054~68 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3ef9ccaea708f123f020fe592cb3883ad54034ab;p=thirdparty%2Fopen-vm-tools.git Fix send retry on vsocket channel. Signed-off-by: Dmitry Torokhov --- diff --git a/open-vm-tools/lib/rpcChannel/rpcChannel.c b/open-vm-tools/lib/rpcChannel/rpcChannel.c index 96a786956..0c6f53201 100644 --- a/open-vm-tools/lib/rpcChannel/rpcChannel.c +++ b/open-vm-tools/lib/rpcChannel/rpcChannel.c @@ -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; } diff --git a/open-vm-tools/lib/rpcChannel/vsockChannel.c b/open-vm-tools/lib/rpcChannel/vsockChannel.c index ad45c5634..f12a81deb 100644 --- a/open-vm-tools/lib/rpcChannel/vsockChannel.c +++ b/open-vm-tools/lib/rpcChannel/vsockChannel.c @@ -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; }