Skip to content

Commit

Permalink
use unique_ptr in io
Browse files Browse the repository at this point in the history
fixing a leak in PipeAcceptor::accept

Change-Id: Id47da5e2a2c4060958aee9233feec859aebc69c7
Reviewed-on: https://gerrit.libreoffice.org/65345
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
  • Loading branch information
Noel Grandin committed Dec 19, 2018
1 parent a064fb2 commit 36e9ecd
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 13 deletions.
5 changes: 2 additions & 3 deletions io/source/acceptor/acc_pipe.cxx
Expand Up @@ -148,19 +148,18 @@ namespace io_acceptor
OUString error = "io.acceptor: pipe already closed" + m_sPipeName;
throw ConnectionSetupException( error );
}
PipeConnection *pConn = new PipeConnection( m_sConnectionDescription );
std::unique_ptr<PipeConnection> pConn(new PipeConnection( m_sConnectionDescription ));

oslPipeError status = pipe.accept( pConn->m_pipe );

if( m_bClosed )
{
// stopAccepting was called !
delete pConn;
return Reference < XConnection >();
}
else if( osl_Pipe_E_None == status )
{
return Reference < XConnection > ( static_cast<XConnection *>(pConn) );
return Reference < XConnection > ( static_cast<XConnection *>(pConn.release()) );
}
else
{
Expand Down
6 changes: 2 additions & 4 deletions io/source/acceptor/acc_socket.cxx
Expand Up @@ -330,17 +330,15 @@ namespace io_acceptor {

Reference< XConnection > SocketAcceptor::accept( )
{
SocketConnection *pConn = new SocketConnection( m_sConnectionDescription );
std::unique_ptr<SocketConnection> pConn(new SocketConnection( m_sConnectionDescription ));

if( m_socket.acceptConnection( pConn->m_socket )!= osl_Socket_Ok )
{
// stopAccepting was called
delete pConn;
return Reference < XConnection > ();
}
if( m_bClosed )
{
delete pConn;
return Reference < XConnection > ();
}

Expand All @@ -358,7 +356,7 @@ namespace io_acceptor {
sizeof( nTcpNoDelay ) , osl_Socket_LevelTcp );
}

return Reference < XConnection > ( static_cast<XConnection *>(pConn) );
return Reference < XConnection > ( static_cast<XConnection *>(pConn.release()) );
}

void SocketAcceptor::stopAccepting()
Expand Down
10 changes: 4 additions & 6 deletions io/source/connector/connector.cxx
Expand Up @@ -85,19 +85,18 @@ namespace stoc_connector
{
OUString aName(aDesc.getParameter("name"));

PipeConnection *pConn = new PipeConnection( sConnectionDescription );
std::unique_ptr<PipeConnection> pConn(new PipeConnection( sConnectionDescription ));

if( pConn->m_pipe.create( aName.pData, osl_Pipe_OPEN, osl::Security() ) )
{
r.set( static_cast<XConnection *>(pConn) );
r.set( static_cast<XConnection *>(pConn.release()) );
}
else
{
OUString const sMessage(
"Connector : couldn't connect to pipe " + aName + "("
+ OUString::number(pConn->m_pipe.getError()) + ")");
SAL_WARN("io.connector", sMessage);
delete pConn;
throw NoConnectException( sMessage );
}
}
Expand All @@ -114,7 +113,7 @@ namespace stoc_connector
bool bTcpNoDelay
= aDesc.getParameter("tcpnodelay").toInt32() != 0;

SocketConnection *pConn = new SocketConnection( sConnectionDescription);
std::unique_ptr<SocketConnection> pConn(new SocketConnection( sConnectionDescription));

SocketAddr AddrTarget( aHost.pData, nPort );
if(pConn->m_socket.connect(AddrTarget) != osl_Socket_Ok)
Expand All @@ -123,7 +122,6 @@ namespace stoc_connector
OUString sError = pConn->m_socket.getErrorAsString();
sMessage += sError;
sMessage += ")";
delete pConn;
throw NoConnectException( sMessage );
}
// we enable tcpNoDelay for loopback connections because
Expand All @@ -135,7 +133,7 @@ namespace stoc_connector
sizeof( nTcpNoDelay ) , osl_Socket_LevelTcp );
}
pConn->completeConnectionString();
r.set( static_cast<XConnection *>(pConn) );
r.set( static_cast<XConnection *>(pConn.release()) );
}
else
{
Expand Down

0 comments on commit 36e9ecd

Please sign in to comment.