Skip to content

CaloTrkMuIdTools: Fix memory leak in CaloMuonTag

We have a minor memory leak in CaloMuonTag in the form of:

15,152 (1,032 direct, 14,120 indirect) bytes in 1 blocks are definitely lost in loss record 94,216 of 97,042
  at 0x4C2AA02: operator new(unsigned long) (vg_replace_malloc.c:344)
  by 0x129B59B8: TStorage::ObjectAlloc(unsigned long) (in libCore.so)
  by 0x33015A59: ROOT::new_TH2F(void*) (in libHist.so)
  by 0x12A43CF0: TClass::New(TClass::ENewType, bool) const (in libCore.so)
  by 0x1211B599: TKey::ReadObj() (in libRIO.so)
  by 0x120D34CF: TDirectoryFile::Get(char const*) (in libRIO.so)
  by 0xAA35F0A9: CaloMuonTag::getHist(TFile*, char const*, TH2F*&) (in libCaloTrkMuIdTools.so)
  by 0xAA35FC83: CaloMuonTag::initialize() (in libCaloTrkMuIdTools.so)

This is because TFile::Get actually allocates memory on the heap that needs to be cleaned-up by the client, which was missing. This MR implements that and also closes the ROOT file early on because by the looks of it we don't need to keep it open anymore once the histogram is read.

cc @nkoehler

Merge request reports