From e485b2898ae65b78cd4208ae2f5337b703228c8a Mon Sep 17 00:00:00 2001 From: Stephan Hageboeck <stephan.hageboeck@cern.ch> Date: Fri, 16 Apr 2021 14:56:14 +0200 Subject: [PATCH] [RF] Fix memory leak in ToyMCSampler. Fix #7890. --- roofit/roostats/inc/RooStats/ToyMCImportanceSampler.h | 2 +- roofit/roostats/inc/RooStats/ToyMCSampler.h | 10 +++++----- roofit/roostats/src/ToyMCSampler.cxx | 2 -- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/roofit/roostats/inc/RooStats/ToyMCImportanceSampler.h b/roofit/roostats/inc/RooStats/ToyMCImportanceSampler.h index c306c0a0a59..07900b37897 100644 --- a/roofit/roostats/inc/RooStats/ToyMCImportanceSampler.h +++ b/roofit/roostats/inc/RooStats/ToyMCImportanceSampler.h @@ -106,7 +106,7 @@ class ToyMCImportanceSampler: public ToyMCSampler { } if( p == NULL && fNullDensities.size() >= 1 ) p = fNullDensities[0]; - if( s == NULL ) s = fParametersForTestStat; + if( s == NULL ) s = fParametersForTestStat.get(); if( s ) s = (const RooArgSet*)s->snapshot(); fNullDensities.push_back( p ); diff --git a/roofit/roostats/inc/RooStats/ToyMCSampler.h b/roofit/roostats/inc/RooStats/ToyMCSampler.h index 9f42674b1d3..372223dfc4c 100644 --- a/roofit/roostats/inc/RooStats/ToyMCSampler.h +++ b/roofit/roostats/inc/RooStats/ToyMCSampler.h @@ -31,9 +31,10 @@ #include "RooMsgService.h" #include "RooAbsPdf.h" #include "RooRealVar.h" - #include "RooDataSet.h" +#include <memory> + namespace RooStats { class DetailedOutputAggregator; @@ -155,8 +156,7 @@ class ToyMCSampler: public TestStatSampler { // Set the Pdf, add to the the workspace if not already there virtual void SetParametersForTestStat(const RooArgSet& nullpoi) { - if( fParametersForTestStat ) delete fParametersForTestStat; - fParametersForTestStat = (const RooArgSet*)nullpoi.snapshot(); + fParametersForTestStat.reset( nullpoi.snapshot() ); } virtual void SetPdf(RooAbsPdf& pdf) { fPdf = &pdf; ClearCache(); } @@ -249,7 +249,7 @@ class ToyMCSampler: public TestStatSampler { // densities, snapshots, and test statistics to reweight to RooAbsPdf *fPdf; // model (can be alt or null) - const RooArgSet* fParametersForTestStat; + std::unique_ptr<const RooArgSet> fParametersForTestStat; std::vector<TestStatistic*> fTestStatistics; std::string fSamplingDistName; // name of the model @@ -296,7 +296,7 @@ class ToyMCSampler: public TestStatSampler { Bool_t fUseMultiGen ; // Use PrepareMultiGen? protected: - ClassDef(ToyMCSampler,3) // A simple implementation of the TestStatSampler interface + ClassDef(ToyMCSampler, 4) // A simple implementation of the TestStatSampler interface }; } diff --git a/roofit/roostats/src/ToyMCSampler.cxx b/roofit/roostats/src/ToyMCSampler.cxx index 245ea16f754..c6e75a31a15 100644 --- a/roofit/roostats/src/ToyMCSampler.cxx +++ b/roofit/roostats/src/ToyMCSampler.cxx @@ -154,7 +154,6 @@ ToyMCSampler::ToyMCSampler() : fSamplingDistName("SD"), fNToys(1) { fPdf = NULL; - fParametersForTestStat = NULL; fPriorNuisance = NULL; fNuisancePars = NULL; fObservables = NULL; @@ -194,7 +193,6 @@ ToyMCSampler::ToyMCSampler() : fSamplingDistName("SD"), fNToys(1) ToyMCSampler::ToyMCSampler(TestStatistic &ts, Int_t ntoys) : fSamplingDistName(ts.GetVarName().Data()), fNToys(ntoys) { fPdf = NULL; - fParametersForTestStat = NULL; fPriorNuisance = NULL; fNuisancePars = NULL; fObservables = NULL; -- GitLab