From a7ce5c3ffbc2cb343b192aa370830a59db9ab073 Mon Sep 17 00:00:00 2001 From: Benjamin Bouvier Date: Fri, 27 Jul 2012 15:09:59 +0200 Subject: [PATCH] eoMpi: memory leak when setting own job functors. Fixed --- eo/src/mpi/eoMpi.h | 51 ++++++++++++++++++++++++++++++++++++--- eo/src/mpi/eoMultiStart.h | 2 +- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/eo/src/mpi/eoMpi.h b/eo/src/mpi/eoMpi.h index 92c2ba99b..ae004fa11 100644 --- a/eo/src/mpi/eoMpi.h +++ b/eo/src/mpi/eoMpi.h @@ -447,10 +447,53 @@ namespace eo IsFinishedFunction & isFinished() { return *_iff; } // Setters - void sendTask( SendTaskFunction* stf ) { _stf = stf; } - void handleResponse( HandleResponseFunction* hrf ) { _hrf = hrf; } - void processTask( ProcessTaskFunction* ptf ) { _ptf = ptf; } - void isFinished( IsFinishedFunction* iff ) { _iff = iff; } + void sendTask( SendTaskFunction* stf ) + { + if( !stf ) + return; + + if( _stf && _stf->needDelete() ) + { + delete _stf; + } + _stf = stf; + } + + void handleResponse( HandleResponseFunction* hrf ) + { + if( !hrf ) + return; + + if( _hrf && _hrf->needDelete() ) + { + delete _hrf; + } + _hrf = hrf; + } + + void processTask( ProcessTaskFunction* ptf ) + { + if( !ptf ) + return; + + if( _ptf && _ptf->needDelete() ) + { + delete _ptf; + } + _ptf = ptf; + } + + void isFinished( IsFinishedFunction* iff ) + { + if( !iff ) + return; + + if( _iff && _iff->needDelete() ) + { + delete _iff; + } + _iff = iff; + } /** * @brief Helpers for wrapping send task functor. diff --git a/eo/src/mpi/eoMultiStart.h b/eo/src/mpi/eoMultiStart.h index 619364942..b8455e680 100644 --- a/eo/src/mpi/eoMultiStart.h +++ b/eo/src/mpi/eoMultiStart.h @@ -397,7 +397,7 @@ namespace eo /************************************** * DEFAULT RESET ALGO IMPLEMENTATIONS * - ************************************** + **************************************/ /** * @brief For a Genetic Algorithm, reinits the population by copying the original one