From 8b5a24f5e80adcd5ff6ea2c28891ef2059d91bca Mon Sep 17 00:00:00 2001 From: Michal Simon Date: Fri, 15 Jan 2021 19:27:54 +0100 Subject: [PATCH] [XrdCl] Make sure operation handlers don't leak memory. --- src/XrdCl/XrdClOperationHandlers.hh | 36 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/XrdCl/XrdClOperationHandlers.hh b/src/XrdCl/XrdClOperationHandlers.hh index 4d4d99e8baa..59caff8c7c4 100644 --- a/src/XrdCl/XrdClOperationHandlers.hh +++ b/src/XrdCl/XrdClOperationHandlers.hh @@ -173,10 +173,10 @@ namespace XrdCl //------------------------------------------------------------------------ void HandleResponse( XRootDStatus *status, AnyObject *response ) { + std::unique_ptr delst( status ); + std::unique_ptr delrsp( response ); Response *res = GetResponse( status, response ); fun( *status, *res ); - delete status; - delete response; } private: @@ -212,9 +212,9 @@ namespace XrdCl //------------------------------------------------------------------------ void HandleResponse( XRootDStatus *status, AnyObject *response ) { + std::unique_ptr delst( status ); + std::unique_ptr delrsp( response ); fun( *status ); - delete status; - delete response; } private: @@ -250,10 +250,10 @@ namespace XrdCl //------------------------------------------------------------------------ void HandleResponse( XRootDStatus *status, AnyObject *response ) { + std::unique_ptr delst( status ); + std::unique_ptr delrsp( response ); Response *resp = GetResponse( status, response ); task( *status, *resp ); - delete status; - delete response; } private: @@ -291,9 +291,9 @@ namespace XrdCl //------------------------------------------------------------------------ void HandleResponse( XRootDStatus *status, AnyObject *response ) { + std::unique_ptr delst( status ); + std::unique_ptr delrsp( response ); task( *status ); - delete status; - delete response; } private: @@ -328,15 +328,18 @@ namespace XrdCl //------------------------------------------------------------------------ void HandleResponse( XRootDStatus *status, AnyObject *response ) { + delete response; + std::unique_ptr delst( status ); + std::unique_ptr delrsp; StatInfo *info = nullptr; if( status->IsOK() ) + { XRootDStatus st = f->Stat( false, info ); + delrsp.reset( info ); + } else info = &NullRef::value; fun( *status, *info ); - if( info != &NullRef::value ) delete info; - delete status; - delete response; } private: @@ -477,6 +480,8 @@ namespace XrdCl //------------------------------------------------------------------------ void HandleResponse( XRootDStatus *status, AnyObject *response ) { + std::unique_ptr delst( status ); + std::unique_ptr delrsp( response ); if( status->IsOK() ) { Response *resp = GetResponse( response ); @@ -490,9 +495,6 @@ namespace XrdCl } else this->SetException( *status ); - - delete status; - delete response; } }; @@ -511,7 +513,6 @@ namespace XrdCl //------------------------------------------------------------------------ FutureWrapper( std::future &ftr ) : FutureWrapperBase( ftr ) { - } //------------------------------------------------------------------------ @@ -519,6 +520,8 @@ namespace XrdCl //------------------------------------------------------------------------ void HandleResponse( XRootDStatus *status, AnyObject *response ) { + std::unique_ptr delst( status ); + std::unique_ptr delrsp( response ); if( status->IsOK() ) { prms.set_value(); @@ -526,9 +529,6 @@ namespace XrdCl } else SetException( *status ); - - delete status; - delete response; } };