Skip to content

[RF] "Definitely lost" reported by Valgrind in RooAbsCollection #18322

@TomasDado

Description

@TomasDado

Explain what you would like to see improved and how.

Running valgrind reports this memory leak:

==41074== 5,528 (72 direct, 5,456 indirect) bytes in 1 blocks are definitely lost in loss record 16,046 of 16,872
==41074==    at 0x4848F95: operator new(unsigned long) (vg_replace_malloc.c:487)
==41074==    by 0x5AE6A13: RooAbsCollection::find(char const*) const (RooAbsCollection.cxx:932)
==41074==    by 0x5D71B86: RooWorkspace::import(RooAbsArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&) (RooWorkspace.cxx:665)
==41074==    by 0x7553342: RooStats::HistFactory::HistoToWorkspaceFactoryFast::MakeCombinedModel(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::vector<std::unique_ptr<RooWorkspace, std::default_delete<RooWorkspace> >, std::allocator<std::unique_ptr<RooWorkspace, std::default_delete<RooWorkspace> > > >&) (HistoToWorkspaceFactoryFast.cxx:1565)
==41074==    by 0x4B72C77: TRExFit::PerformWorkspaceCombination(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) const (TRExFit.cc:5014)
==41074==    by 0x4BF32E3: TRExFit::PrepareMixedDataset(TRExFit::WorkspaceType) (TRExFit.cc:10421)
==41074==    by 0x4C01732: TRExFit::Fit(bool) (TRExFit.cc:4338)
==41074==    by 0x115524: FitExample(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (trex-fitter.cc:473)
==41074==    by 0x10FE1E: main (trex-fitter.cc:696)

The relavant line uses raw pointers so it looks like the leak might be real.

Potentially a related stack trace:

==41472== 2,400 bytes in 100 blocks are indirectly lost in loss record 16,476 of 17,809
==41472==    at 0x4848F95: operator new(unsigned long) (vg_replace_malloc.c:487)
==41472==    by 0x5AEDE53: allocate (new_allocator.h:151)
==41472==    by 0x5AEDE53: allocate (alloc_traits.h:478)
==41472==    by 0x5AEDE53: _M_allocate_node<const TNamed*, RooAbsArg* const&> (hashtable_policy.h:2019)
==41472==    by 0x5AEDE53: _Scoped_node<const TNamed*, RooAbsArg* const&> (hashtable.h:312)
==41472==    by 0x5AEDE53: _M_emplace<const TNamed*, RooAbsArg* const&> (hashtable.h:2143)
==41472==    by 0x5AEDE53: emplace<const TNamed*, RooAbsArg* const&> (hashtable.h:1001)
==41472==    by 0x5AEDE53: emplace<const TNamed*, RooAbsArg* const&> (unordered_map.h:396)
==41472==    by 0x5AEDE53: RooFit::Detail::HashAssistedFind::HashAssistedFind<__gnu_cxx::__normal_iterator<RooAbsArg* const*, std::vector<RooAbsArg*, std::allocator<RooAbsArg*> > > >(__gnu_cxx::__normal_iterator<RooAbsArg* const*, std::vector<RooAbsArg*, std::allocator<RooAbsArg*> > >, __gnu_cxx::__normal_iterator<RooAbsArg* const*, std::vector<RooAbsArg*, std::allocator<RooAbsArg*> > >) (RooAbsCollection.cxx:76)
==41472==    by 0x5AE6A26: RooAbsCollection::find(char const*) const (RooAbsCollection.cxx:932)
==41472==    by 0x5D71B86: RooWorkspace::import(RooAbsArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&, RooCmdArg const&) (RooWorkspace.cxx:665)
==41472==    by 0x7553342: RooStats::HistFactory::HistoToWorkspaceFactoryFast::MakeCombinedModel(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::vector<std::unique_ptr<RooWorkspace, std::default_delete<RooWorkspace> >, std::allocator<std::unique_ptr<RooWorkspace, std::default_delete<RooWorkspace> > > >&) (HistoToWorkspaceFactoryFast.cxx:1565)
==41472==    by 0x4B72C77: TRExFit::PerformWorkspaceCombination(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) const (TRExFit.cc:5014)
==41472==    by 0x4BF32E3: TRExFit::PrepareMixedDataset(TRExFit::WorkspaceType) (TRExFit.cc:10421)
==41472==    by 0x4BF5DED: TRExFit::GetSignificance() (TRExFit.cc:5501) 
==41472==    by 0x116431: FitExample(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (trex-fitter.cc:506)
==41472==    by 0x10FE1E: main (trex-fitter.cc:696)

ROOT version

ROOT Version: 6.35.01
Built for linuxx8664gcc on Apr 08 2025, 06:57:24
From heads/master@7f390ce5ef

Installation method

build from source

Operating system

Ubuntu 24.10

Additional context

No response

Metadata

Metadata

Assignees

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions