///
/// Cvetan Cheshkov 1/04/2008
///////////////////////////////////////////////////////////////////////////////
+#include <TSystem.h>
#include "AliRawReaderDateOnline.h"
#include "AliLog.h"
const char* /* filename */
#endif
) :
- AliRawReaderDate((void*)NULL)
+ AliRawReaderDate((void*)NULL),
+ fStop(kFALSE)
{
// Constructor
monitorSetNowait();
monitorSetNoWaitNetworkTimeout(1000);
- const Char_t* table[] = {"ALL", "yes", "*", "*",
- "EOR", "all","*", "*",
+ const Char_t* table[] = {"ALL", "few", "*", "*",
+ "EOR", "yes","*", "*",
NULL, NULL, NULL, NULL};
monitorDeclareTableExtended(const_cast<char**>(table));
+ // install SIGUSR1 handler to allow clean end-of-events loop
+ gSystem->AddSignalHandler(new AliRawReaderDateIntHandler(this));
+
#else
Fatal("AliRawReaderDateOnline", "this class was compiled without DATE");
#endif
#ifdef ALI_DATE
+ // Stop on SIGUSR1
+ if (fStop) {
+ AliInfo("Raw-data reading stopped by SIGUSR1");
+ if (fEvent) free(fEvent);
+ fEvent = NULL;
+ return kFALSE;
+ }
+
// Event already loaded no need take a new one
if (AliRawReaderDate::NextEvent()) return kTRUE;
if (!IsEventSelected()) {
free(fEvent);
+ fEvent = NULL;
continue;
}
#ifdef ALI_DATE
const Char_t* table[] = {"ALL", "no", "*", "*",
"PHY", "yes","*", "*",
- "EOR", "all","*", "*",
+ "EOR", "yes","*", "*",
NULL, NULL, NULL, NULL};
TString trSelection;
for (Int_t i = 0; i < 50; i++) {
if (triggerMask & (1ull << i)) {
if (!trSelection.IsNull()) trSelection += "&";
- trSelection += Form("%d",i+1);
+ trSelection += Form("%d",i);
}
}
table[7] = trSelection.Data();
+ monitorLogout();
monitorDeclareTableExtended(const_cast<char**>(table));
#endif
AliRawReader::SelectEvents(type,triggerMask,triggerExpr);
}
+
+//______________________________________________________________________________
+void AliRawReaderDateOnline::Stop()
+{
+ // Stop the event loop (called on SIGUSR1)
+
+ fStop = kTRUE;
+}