diff --git a/Framework/Core/src/RootArrowFilesystem.cxx b/Framework/Core/src/RootArrowFilesystem.cxx index 6976c710062e6..a230d042d1b60 100644 --- a/Framework/Core/src/RootArrowFilesystem.cxx +++ b/Framework/Core/src/RootArrowFilesystem.cxx @@ -19,6 +19,8 @@ #include #include #include +#include +#include #include #include #include @@ -47,6 +49,12 @@ TFileFileSystem::~TFileFileSystem() { if (mOwnsFile) { mFile->Close(); + { + // TFile::Close() returns early when !IsOpen() (e.g. TNetXNGFile after a fatal xrootd error) and ~TFile doesn't + // clean up either, so the file stays in gROOT's list of files. Remove it so the list doesn't keep a dangling pointer. + R__LOCKGUARD(gROOTMutex); + gROOT->GetListOfFiles()->Remove(mFile); + } delete mFile; } }