Skip to content

Commit

Permalink
[XrdCl] Fix memory leak on HS t/o.
Browse files Browse the repository at this point in the history
  • Loading branch information
simonmichal authored and gganis committed Nov 23, 2021
1 parent 84e5264 commit e1a6e15
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 10 deletions.
16 changes: 7 additions & 9 deletions src/XrdCl/XrdClAsyncSocketHandler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ namespace XrdCl
pStream( strm ),
pStreamName( ToStreamName( strm, subStreamNum ) ),
pSocket( new Socket() ),
pHandShakeData( 0 ),
pHandShakeDone( false ),
pConnectionStarted( 0 ),
pConnectionTimeout( 0 ),
Expand Down Expand Up @@ -322,13 +321,13 @@ namespace XrdCl
//--------------------------------------------------------------------------
// Initialize the handshake
//--------------------------------------------------------------------------
pHandShakeData = new HandShakeData( pStream->GetURL(),
pSubStreamNum );
pHandShakeData.reset( new HandShakeData( pStream->GetURL(),
pSubStreamNum ) );
pHandShakeData->serverAddr = pSocket->GetServerAddress();
pHandShakeData->clientName = pSocket->GetSockName();
pHandShakeData->streamName = pStreamName;

st = pTransport->HandShake( pHandShakeData, *pChannelData );
st = pTransport->HandShake( pHandShakeData.get(), *pChannelData );
if( !st.IsOK() )
{
log->Error( AsyncSockMsg, "[%s] Connection negotiation failed",
Expand Down Expand Up @@ -525,7 +524,7 @@ namespace XrdCl
// OK, we have a new message, let's deal with it;
//--------------------------------------------------------------------------
pHandShakeData->in = msg.release();
XRootDStatus st = pTransport->HandShake( pHandShakeData, *pChannelData );
XRootDStatus st = pTransport->HandShake( pHandShakeData.get(), *pChannelData );

//--------------------------------------------------------------------------
// Deal with wait responses
Expand Down Expand Up @@ -582,7 +581,7 @@ namespace XrdCl
// If now is the time to enable encryption
//--------------------------------------------------------------------------
if( !pSocket->IsEncrypted() &&
pTransport->NeedEncryption( pHandShakeData, *pChannelData ) )
pTransport->NeedEncryption( pHandShakeData.get(), *pChannelData ) )
{
XRootDStatus st = DoTlsHandShake();
if( !st.IsOK() || st.code == suRetry ) return;
Expand All @@ -609,8 +608,7 @@ namespace XrdCl
//--------------------------------------------------------------------------
if( done )
{
delete pHandShakeData;
pHandShakeData = nullptr;
pHandShakeData.reset();
hswriter.reset();
hsreader.reset();
//------------------------------------------------------------------------
Expand Down Expand Up @@ -749,7 +747,7 @@ namespace XrdCl
XRootDStatus st = DoTlsHandShake();
if( !st.IsOK() || st.code == suRetry ) return;

HandShakeNextStep( pTransport->HandShakeDone( pHandShakeData,
HandShakeNextStep( pTransport->HandShakeDone( pHandShakeData.get(),
*pChannelData ) );
}

Expand Down
2 changes: 1 addition & 1 deletion src/XrdCl/XrdClAsyncSocketHandler.hh
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ namespace XrdCl
std::string pStreamName;
Socket *pSocket;
XrdNetAddr pSockAddr;
HandShakeData *pHandShakeData;
std::unique_ptr<HandShakeData> pHandShakeData;
bool pHandShakeDone;
uint16_t pTimeoutResolution;
time_t pConnectionStarted;
Expand Down

0 comments on commit e1a6e15

Please sign in to comment.