Memory leaks in TChain/TTree GetEntry

Hi,

I’m trying to reduce memory leaks in my code (C++ compiled against ROOT libraries) and I’ve noticed large memory leaks when reading TChains, particularly from TChain->GetEntries and TChain->GetEntry. The minimal code sample below produces a huge number of memory leak reports from valgrind (attached below the code) even when running with the valgrind-root.supp (as I am here). Are these real? If they are, is there anything I can do to get around this problem? If they’re spurious, shouldn’t they be included in the valgrind-root.supp?

Thank you,
James

=============================================================================
#include “TChain.h”

int main(int argc, char **argv) {

TChain qcdChain = new TChain( “qcd” );
qcdChain->Add( "/unix/atlas2/robinson/qcdntuples/JetTauEtmiss/periodB/
.root*" );

unsigned long totalEntries = qcdChain->GetEntries();
for (unsigned long eventNumber = 0; eventNumber < 1000; ++eventNumber) {
qcdChain->GetEntry(eventNumber);
}

delete qcdChain;
return 0;
}

==6520== 6,298 (1,440 direct, 4,858 indirect) bytes in 9 blocks are definitely lost in loss record 34,273 of 34,366
==6520== at 0x4A0666E: operator new(unsigned long) (vg_replace_malloc.c:220)
==6520== by 0x50755D9: TStorage::ObjectAlloc(unsigned long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x454E70: TObject::operator new(unsigned long) (TObject.h:156)
==6520== by 0x6375D50: ROOT::new_TStreamerInfo(void*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x50CD00C: TClass::New(TClass::ENewType) const (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x629F5F0: TBufferFile::ReadObjectAny(TClass const*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x50B4D2E: TBuffer& operator>>(TBuffer&, TObject*&) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x50B9ACA: TList::Streamer(TBuffer&) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x62CB166: TKey::ReadObjWithBuffer(char*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B62CC: TFile::GetStreamerInfoList() (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B8C39: TFile::ReadStreamerInfo() (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B3D0D: TFile::Init(bool) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B999B: TFile::TFile(char const*, char const*, char const*, int) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62BD711: TFile::Open(char const*, char const*, char const*, int, int) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x7A613CC: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A60C02: TChain::GetEntries() const (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x454DDA: main (D3PDReader.cxx:10)
==6520==
==6520== 6,298 (1,440 direct, 4,858 indirect) bytes in 9 blocks are definitely lost in loss record 34,274 of 34,366
==6520== at 0x4A0666E: operator new(unsigned long) (vg_replace_malloc.c:220)
==6520== by 0x50755D9: TStorage::ObjectAlloc(unsigned long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x454E70: TObject::operator new(unsigned long) (TObject.h:156)
==6520== by 0x6375D50: ROOT::new_TStreamerInfo(void*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x50CD00C: TClass::New(TClass::ENewType) const (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x629F5F0: TBufferFile::ReadObjectAny(TClass const*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x50B4D2E: TBuffer& operator>>(TBuffer&, TObject*&) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x50B9ACA: TList::Streamer(TBuffer&) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x62CB166: TKey::ReadObjWithBuffer(char*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B62CC: TFile::GetStreamerInfoList() (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B8C39: TFile::ReadStreamerInfo() (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B3D0D: TFile::Init(bool) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B999B: TFile::TFile(char const*, char const*, char const*, int) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62BD711: TFile::Open(char const*, char const*, char const*, int, int) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x7A613CC: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A61CED: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A60C02: TChain::GetEntries() const (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x454DDA: main (D3PDReader.cxx:10)
==6520==
==6520== 6,298 (1,440 direct, 4,858 indirect) bytes in 9 blocks are definitely lost in loss record 34,275 of 34,366
==6520== at 0x4A0666E: operator new(unsigned long) (vg_replace_malloc.c:220)
==6520== by 0x50755D9: TStorage::ObjectAlloc(unsigned long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x454E70: TObject::operator new(unsigned long) (TObject.h:156)
==6520== by 0x6375D50: ROOT::new_TStreamerInfo(void*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x50CD00C: TClass::New(TClass::ENewType) const (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x629F5F0: TBufferFile::ReadObjectAny(TClass const*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x50B4D2E: TBuffer& operator>>(TBuffer&, TObject*&) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x50B9ACA: TList::Streamer(TBuffer&) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x62CB166: TKey::ReadObjWithBuffer(char*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B62CC: TFile::GetStreamerInfoList() (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B8C39: TFile::ReadStreamerInfo() (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B3D0D: TFile::Init(bool) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B999B: TFile::TFile(char const*, char const*, char const*, int) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62BD711: TFile::Open(char const*, char const*, char const*, int, int) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x7A613CC: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A61CED: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A61CED: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A60C02: TChain::GetEntries() const (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x454DDA: main (D3PDReader.cxx:10)
==6520==
==6520== 6,298 (1,440 direct, 4,858 indirect) bytes in 9 blocks are definitely lost in loss record 34,276 of 34,366
==6520== at 0x4A0666E: operator new(unsigned long) (vg_replace_malloc.c:220)
==6520== by 0x50755D9: TStorage::ObjectAlloc(unsigned long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x454E70: TObject::operator new(unsigned long) (TObject.h:156)
==6520== by 0x6375D50: ROOT::new_TStreamerInfo(void*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x50CD00C: TClass::New(TClass::ENewType) const (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x629F5F0: TBufferFile::ReadObjectAny(TClass const*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x50B4D2E: TBuffer& operator>>(TBuffer&, TObject*&) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x50B9ACA: TList::Streamer(TBuffer&) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x62CB166: TKey::ReadObjWithBuffer(char*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B62CC: TFile::GetStreamerInfoList() (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B8C39: TFile::ReadStreamerInfo() (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B3D0D: TFile::Init(bool) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B999B: TFile::TFile(char const*, char const*, char const*, int) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62BD711: TFile::Open(char const*, char const*, char const*, int, int) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x7A613CC: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A61CED: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A61CED: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A61CED: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A60C02: TChain::GetEntries() const (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x454DDA: main (D3PDReader.cxx:10)
==6520==
==6520== 6,298 (1,440 direct, 4,858 indirect) bytes in 9 blocks are definitely lost in loss record 34,277 of 34,366
==6520== at 0x4A0666E: operator new(unsigned long) (vg_replace_malloc.c:220)
==6520== by 0x50755D9: TStorage::ObjectAlloc(unsigned long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x454E70: TObject::operator new(unsigned long) (TObject.h:156)
==6520== by 0x6375D50: ROOT::new_TStreamerInfo(void*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x50CD00C: TClass::New(TClass::ENewType) const (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x629F5F0: TBufferFile::ReadObjectAny(TClass const*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x50B4D2E: TBuffer& operator>>(TBuffer&, TObject*&) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x50B9ACA: TList::Streamer(TBuffer&) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x62CB166: TKey::ReadObjWithBuffer(char*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B62CC: TFile::GetStreamerInfoList() (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B8C39: TFile::ReadStreamerInfo() (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B3D0D: TFile::Init(bool) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B999B: TFile::TFile(char const*, char const*, char const*, int) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62BD711: TFile::Open(char const*, char const*, char const*, int, int) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x7A613CC: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A61CED: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A61CED: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A61CED: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A61CED: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A60C02: TChain::GetEntries() const (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520==
==6520== 6,298 (1,440 direct, 4,858 indirect) bytes in 9 blocks are definitely lost in loss record 34,278 of 34,366
==6520== at 0x4A0666E: operator new(unsigned long) (vg_replace_malloc.c:220)
==6520== by 0x50755D9: TStorage::ObjectAlloc(unsigned long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x454E70: TObject::operator new(unsigned long) (TObject.h:156)
==6520== by 0x6375D50: ROOT::new_TStreamerInfo(void*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x50CD00C: TClass::New(TClass::ENewType) const (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x629F5F0: TBufferFile::ReadObjectAny(TClass const*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x50B4D2E: TBuffer& operator>>(TBuffer&, TObject*&) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x50B9ACA: TList::Streamer(TBuffer&) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x62CB166: TKey::ReadObjWithBuffer(char*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B62CC: TFile::GetStreamerInfoList() (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B8C39: TFile::ReadStreamerInfo() (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B3D0D: TFile::Init(bool) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B999B: TFile::TFile(char const*, char const*, char const*, int) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62BD711: TFile::Open(char const*, char const*, char const*, int, int) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x7A613CC: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A60C5B: TChain::GetEntry(long long, int) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x454E25: main (D3PDReader.cxx:12)
==6520==
==6520== 321,198 (73,440 direct, 247,758 indirect) bytes in 459 blocks are definitely lost in loss record 34,365 of 34,366
==6520== at 0x4A0666E: operator new(unsigned long) (vg_replace_malloc.c:220)
==6520== by 0x50755D9: TStorage::ObjectAlloc(unsigned long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x454E70: TObject::operator new(unsigned long) (TObject.h:156)
==6520== by 0x6375D50: ROOT::new_TStreamerInfo(void*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x50CD00C: TClass::New(TClass::ENewType) const (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x629F5F0: TBufferFile::ReadObjectAny(TClass const*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x50B4D2E: TBuffer& operator>>(TBuffer&, TObject*&) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x50B9ACA: TList::Streamer(TBuffer&) (in /usr/local/root-v5.26.00-gcc3.4/lib/libCore.so)
==6520== by 0x62CB166: TKey::ReadObjWithBuffer(char*) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B62CC: TFile::GetStreamerInfoList() (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B8C39: TFile::ReadStreamerInfo() (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B3D0D: TFile::Init(bool) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62B999B: TFile::TFile(char const*, char const*, char const*, int) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x62BD711: TFile::Open(char const*, char const*, char const*, int, int) (in /usr/local/root-v5.26.00-gcc3.4/lib/libRIO.so)
==6520== by 0x7A613CC: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A61CED: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A61CED: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A61CED: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A61CED: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520== by 0x7A61CED: TChain::LoadTree(long long) (in /usr/local/root-v5.26.00-gcc3.4/lib/libTree.so)
==6520==
==6520== LEAK SUMMARY:
==6520== definitely lost: 83,774 bytes in 682 blocks
==6520== indirectly lost: 184,680 bytes in 1,539 blocks
==6520== possibly lost: 856 bytes in 11 blocks
==6520== still reachable: 5,919,754 bytes in 41,814 blocks
==6520== suppressed: 440,695 bytes in 9,160 blocks
==6520== Reachable blocks (those to which a pointer was found) are not shown.
==6520== To see them, rerun with: --leak-check=full --show-reachable=yes
==6520==
==6520== ERROR SUMMARY: 24 errors from 24 contexts (suppressed: 1660 from 1660)
–6520–
–6520-- used_suppression: 1559 TString generated by ROOT
–6520-- used_suppression: 182 Array of objects allocated in TStreamerInfo::Compile
–6520-- used_suppression: 53 TClass::fStreamerInfo’s storage
–6520-- used_suppression: 26 std::string uses in various place.
–6520-- used_suppression: 16 TClass’s list of base classes (G__DataMemberInfo elements)
–6520-- used_suppression: 52 TClass::AddClass()'s std::string
–6520-- used_suppression: 1 TUnixSystem::Setenv, see its doc
–6520-- used_suppression: 18 Unloaded TClass and its fClassInfo
–6520-- used_suppression: 33 TClass::fClassInfo
–6520-- used_suppression: 4 dl-hack3
==6520==
==6520== ERROR SUMMARY: 24 errors from 24 contexts (suppressed: 1660 from 1660)

Hi,

Which patch release of v5.26 are you using? Can you try with v5.26/00e and/or the trunk? (I can not reproduce your problem).

Cheers,
Philippe.

I’m using:

ROOT 5.26/00 (trunk@31882, Dec 14 2009, 20:18:36 on linuxx8664gcc)
CINT/ROOT C/C++ Interpreter version 5.17.00, Dec 21, 2008

I’ll try with 5.26/00e locally on my own computer but I’m not sure that will help in the long run as this program needs to be run on my institution’s SLC5 computers where I won’t be able to install a newer version of ROOT.

Thanks,
James

Hi,

Interestingly, I get a different set of report from valgrind. Which version of valgrind and which valgrind options are you using?

Cheers,
Philippe.

OK. I can reproduce the problem with these files:

=========================== test.cxx =================================
#include “TChain.h”

int main(int argc, char **argv) {

TChain *qcdChain = new TChain( “qcd” );

qcdChain->Add( “.root” );

delete qcdChain;

return 0;

}
=========================== test.cxx =================================

=========================== Makefile =================================
HEADER_DIR = .
SOURCE_DIR = .
OBJECT_DIR = .

_OBJECTS = test.o
OBJECTS = $(patsubst %, $(OBJECT_DIR)/%, $(_OBJECTS) )

CC=g++ -g -Wall
CFLAGS+=root-config --cflags

LIBS+=root-config --libs

$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.cxx
$(CC) -c -o $@ $< $(CFLAGS)

test: $(OBJECTS)
$(CC) -o $@ $^ $(LIBS) $(CFLAGS)

clean:
rm -rf $(OBJECT_DIR)/*.o test
=========================== Makefile =================================

and then (after make clean; make) running this command

valgrind -v --tool=memcheck --leak-check=yes --num-callers=40 ./test

I’m running on:

uname -a
Linux pc164.hep.ucl.ac.uk 2.6.18-194.11.4.el5 #1 SMP Tue Sep 21 12:04:09 CEST 2010 x86_64 x86_64 x86_64 GNU/Linux

cat /etc/redhat-release
Scientific Linux CERN SLC release 5.5 (Boron)

valgrind --version
valgrind-3.5.0

root-config --cflags
-pthread -m64 -I/usr/local/root-v5.26.00/include

root-config --libs
-L/usr/local/root-v5.26.00/lib -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -pthread -lm -ldl -rdynamic

I get the same error on my local machine (running openSUSE 11.3 with ROOT 5.26.00). I haven’t had time to compile a newer version to test with. Is there any other information you need?

Thanks,
James

Compiling with ROOT 5.27.06 from AFS still gives some large possible leaks, such as:

==10506== 22,856 bytes in 321 blocks are possibly lost in loss record 22,214 of 22,216
==10506== at 0x4A062CA: operator new[](unsigned long) (vg_replace_malloc.c:264)
==10506== by 0x4DC6553: TStringRef::GetRep(int, int) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4DC9484: TString::Replace(int, int, char const*, int) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4DA416C: TNamed::SetName(char const*) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4E3B300: TDataType::TDataType(void*) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4E1C363: TCint::UpdateListOfTypes() (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4DBE450: TROOT::GetListOfTypes(bool) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4DBECA0: TROOT::GetType(char const*, bool) const (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4E304C2: TClass::GetClass(char const*, bool, bool) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4DBE0F8: TROOT::IgnoreInclude(char const*, char const*) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x566BDD8: G__loadfile (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCint.so)
==10506== by 0x56B65B2: G__process_cmd (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCint.so)
==10506== by 0x4E1D7E0: TCint::ProcessLine(char const*, TInterpreter::EErrorCode*) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4E1A332: TCint::ProcessLineSynch(char const*, TInterpreter::EErrorCode*) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4D79E48: TApplication::ExecuteFile(char const*, int*, bool) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4E1B402: TCint::ExecuteMacro(char const*, TInterpreter::EErrorCode*) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4DC17DE: TROOT::Macro(char const*, int*, bool) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4DA8D7A: TPluginManager::LoadHandlerMacros(char const*) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4DA9144: TPluginManager::LoadHandlersFromPluginDirs(char const*) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4DA98D9: TPluginManager::FindHandler(char const*, char const*) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4DD9F64: TSystem::FindHelper(char const*, void*) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x4E5970A: TUnixSystem::OpenDirectory(char const*) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libCore.so)
==10506== by 0x76D82DE: TChain::Add(char const*, long long) (in /afs/cern.ch/sw/lcg/app/releases/ROOT/5.27.06/x86_64-slc5-gcc43-opt/root/lib/libTree.so)
==10506== by 0x400AB9: main (test.cxx:6)

James