diff --git a/fairroot/online/source/FairLmdSource.cxx b/fairroot/online/source/FairLmdSource.cxx index fc41dd1bca..51a10787db 100644 --- a/fairroot/online/source/FairLmdSource.cxx +++ b/fairroot/online/source/FairLmdSource.cxx @@ -54,6 +54,7 @@ FairLmdSource::FairLmdSource(const FairLmdSource& source) FairLmdSource::~FairLmdSource() { + CloseLmd(); fFileNames->Delete(); delete fFileNames; } @@ -121,6 +122,8 @@ Bool_t FairLmdSource::Init() Bool_t FairLmdSource::OpenNextFile(TString fileName) { + CloseLmd(); + Int_t inputMode = GETEVT__FILE; fxInputChannel = new s_evt_channel; void* headptr = &fxInfoHeader; @@ -133,6 +136,8 @@ Bool_t FairLmdSource::OpenNextFile(TString fileName) if (status) { LOG(error) << "File " << fileName << " opening failed."; + delete fxInputChannel; + fxInputChannel = nullptr; return kFALSE; } @@ -166,7 +171,7 @@ Int_t FairLmdSource::ReadEvent(UInt_t) } if (GETEVT__NOMORE == status) { - Close(); + CloseLmd(); } TString name = (static_cast(fFileNames->At(fCurrentFile)))->GetString(); @@ -236,7 +241,17 @@ Int_t FairLmdSource::ReadEvent(UInt_t) void FairLmdSource::Close() { + CloseLmd(); +} + +void FairLmdSource::CloseLmd() +{ + if (!fxInputChannel) { + return; + } f_evt_get_close(fxInputChannel); + delete fxInputChannel; + fxInputChannel = nullptr; Unpack(reinterpret_cast(fxBuffer), sizeof(s_bufhe), -4, -4, -4, -4, -4); fCurrentEvent = 0; } diff --git a/fairroot/online/source/FairLmdSource.h b/fairroot/online/source/FairLmdSource.h index 39c53a1a80..d8b77943eb 100644 --- a/fairroot/online/source/FairLmdSource.h +++ b/fairroot/online/source/FairLmdSource.h @@ -65,6 +65,9 @@ class FairLmdSource : public FairMbsSource FairLmdSource& operator=(const FairLmdSource&); + private: + void CloseLmd(); + ClassDefOverride(FairLmdSource, 0); };