From 36e9ecd900fec7e4cc517d829345bd3e8406be59 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Tue, 18 Dec 2018 12:00:09 +0200 Subject: use unique_ptr in io fixing a leak in PipeAcceptor::accept Change-Id: Id47da5e2a2c4060958aee9233feec859aebc69c7 Reviewed-on: https://gerrit.libreoffice.org/65345 Tested-by: Jenkins Reviewed-by: Noel Grandin --- io/source/acceptor/acc_pipe.cxx | 5 ++--- io/source/acceptor/acc_socket.cxx | 6 ++---- io/source/connector/connector.cxx | 10 ++++------ 3 files changed, 8 insertions(+), 13 deletions(-) (limited to 'io') diff --git a/io/source/acceptor/acc_pipe.cxx b/io/source/acceptor/acc_pipe.cxx index 4410760c6f26..50a9939a2144 100644 --- a/io/source/acceptor/acc_pipe.cxx +++ b/io/source/acceptor/acc_pipe.cxx @@ -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 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(pConn) ); + return Reference < XConnection > ( static_cast(pConn.release()) ); } else { diff --git a/io/source/acceptor/acc_socket.cxx b/io/source/acceptor/acc_socket.cxx index f34b3635eb7b..5a9956eb75d9 100644 --- a/io/source/acceptor/acc_socket.cxx +++ b/io/source/acceptor/acc_socket.cxx @@ -330,17 +330,15 @@ namespace io_acceptor { Reference< XConnection > SocketAcceptor::accept( ) { - SocketConnection *pConn = new SocketConnection( m_sConnectionDescription ); + std::unique_ptr 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 > (); } @@ -358,7 +356,7 @@ namespace io_acceptor { sizeof( nTcpNoDelay ) , osl_Socket_LevelTcp ); } - return Reference < XConnection > ( static_cast(pConn) ); + return Reference < XConnection > ( static_cast(pConn.release()) ); } void SocketAcceptor::stopAccepting() diff --git a/io/source/connector/connector.cxx b/io/source/connector/connector.cxx index 1de3ee92ec2d..c95219d53ab9 100644 --- a/io/source/connector/connector.cxx +++ b/io/source/connector/connector.cxx @@ -85,11 +85,11 @@ namespace stoc_connector { OUString aName(aDesc.getParameter("name")); - PipeConnection *pConn = new PipeConnection( sConnectionDescription ); + std::unique_ptr pConn(new PipeConnection( sConnectionDescription )); if( pConn->m_pipe.create( aName.pData, osl_Pipe_OPEN, osl::Security() ) ) { - r.set( static_cast(pConn) ); + r.set( static_cast(pConn.release()) ); } else { @@ -97,7 +97,6 @@ namespace stoc_connector "Connector : couldn't connect to pipe " + aName + "(" + OUString::number(pConn->m_pipe.getError()) + ")"); SAL_WARN("io.connector", sMessage); - delete pConn; throw NoConnectException( sMessage ); } } @@ -114,7 +113,7 @@ namespace stoc_connector bool bTcpNoDelay = aDesc.getParameter("tcpnodelay").toInt32() != 0; - SocketConnection *pConn = new SocketConnection( sConnectionDescription); + std::unique_ptr pConn(new SocketConnection( sConnectionDescription)); SocketAddr AddrTarget( aHost.pData, nPort ); if(pConn->m_socket.connect(AddrTarget) != osl_Socket_Ok) @@ -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 @@ -135,7 +133,7 @@ namespace stoc_connector sizeof( nTcpNoDelay ) , osl_Socket_LevelTcp ); } pConn->completeConnectionString(); - r.set( static_cast(pConn) ); + r.set( static_cast(pConn.release()) ); } else { -- cgit