diff --git a/src/rpc/src/rpcMain.c b/src/rpc/src/rpcMain.c index e432e47e368f030d8ee3e68cea8f5c6055915b69..0d5b80e8f3e56ac680b2ab2605740a2fc7d0a9b1 100644 --- a/src/rpc/src/rpcMain.c +++ b/src/rpc/src/rpcMain.c @@ -602,10 +602,13 @@ static void rpcReleaseConn(SRpcConn *pConn) { taosHashRemove(pRpc->hash, hashstr, size); rpcFreeMsg(pConn->pRspMsg); // it may have a response msg saved, but not request msg pConn->pRspMsg = NULL; - if (pConn->pReqMsg) rpcFreeCont(pConn->pReqMsg); + + // if server has ever reported progress, free content + if (pConn->pReqMsg) rpcFreeCont(pConn->pReqMsg); // do not use rpcFreeMsg } else { + // if there is an outgoing message, free it if (pConn->outType && pConn->pReqMsg) - rpcFreeCont(pConn->pReqMsg); + rpcFreeMsg(pConn->pReqMsg); } // memset could not be used, since lockeBy can not be reset