diff --git a/fairmq/FairMQDevice.cxx b/fairmq/FairMQDevice.cxx index f67e019b..e131c529 100644 --- a/fairmq/FairMQDevice.cxx +++ b/fairmq/FairMQDevice.cxx @@ -35,6 +35,9 @@ FairMQDevice::FairMQDevice() , fLogIntervalInMs(1000) , fCommandSocket() , fTransportFactory(NULL) + , fInitialValidationFinished(false) + , fInitialValidationCondition() + , fInitialValidationMutex() { } @@ -86,6 +89,11 @@ void FairMQDevice::InitWrapper() } } + // notify parent thread about end of processing. + boost::lock_guard lock(fInitialValidationMutex); + fInitialValidationFinished = true; + fInitialValidationCondition.notify_one(); + ++numAttempts; if (numAttempts > maxAttempts) { @@ -111,6 +119,15 @@ void FairMQDevice::InitWrapper() fStateCondition.notify_one(); } +void FairMQDevice::WaitForInitialValidation() +{ + boost::unique_lock lock(fInitialValidationMutex); + while (!fInitialValidationFinished) + { + fInitialValidationCondition.wait(lock); + } +} + void FairMQDevice::Init() { } @@ -236,6 +253,8 @@ void FairMQDevice::PrintChannel(const string& name) void FairMQDevice::RunWrapper() { + LOG(INFO) << "DEVICE: Running..."; + boost::thread rateLogger(boost::bind(&FairMQDevice::LogSocketRates, this)); Run(); diff --git a/fairmq/FairMQDevice.h b/fairmq/FairMQDevice.h index 18751a60..3a2e1ecd 100644 --- a/fairmq/FairMQDevice.h +++ b/fairmq/FairMQDevice.h @@ -47,6 +47,8 @@ class FairMQDevice : public FairMQStateMachine, public FairMQConfigurable void SortChannel(const std::string& name, const bool reindex = true); void PrintChannel(const std::string& name); + void WaitForInitialValidation(); + virtual void SetProperty(const int key, const std::string& value); virtual std::string GetProperty(const int key, const std::string& default_ = ""); virtual void SetProperty(const int key, const int value); @@ -101,6 +103,11 @@ class FairMQDevice : public FairMQStateMachine, public FairMQConfigurable bool InitChannel(FairMQChannel&); private: + // condition variable to notify parent thread about end of initial validation. + bool fInitialValidationFinished; + boost::condition_variable fInitialValidationCondition; + boost::mutex fInitialValidationMutex; + /// Copy Constructor FairMQDevice(const FairMQDevice&); FairMQDevice operator=(const FairMQDevice&);