Add WaitForInitialValidation()

This commit is contained in:
Alexey Rybalchenko 2015-06-19 12:02:51 +02:00
parent e5313d03fe
commit 252acf41c8
2 changed files with 26 additions and 0 deletions

View File

@ -35,6 +35,9 @@ FairMQDevice::FairMQDevice()
, fLogIntervalInMs(1000) , fLogIntervalInMs(1000)
, fCommandSocket() , fCommandSocket()
, fTransportFactory(NULL) , fTransportFactory(NULL)
, fInitialValidationFinished(false)
, fInitialValidationCondition()
, fInitialValidationMutex()
{ {
} }
@ -86,6 +89,11 @@ void FairMQDevice::InitWrapper()
} }
} }
// notify parent thread about end of processing.
boost::lock_guard<boost::mutex> lock(fInitialValidationMutex);
fInitialValidationFinished = true;
fInitialValidationCondition.notify_one();
++numAttempts; ++numAttempts;
if (numAttempts > maxAttempts) if (numAttempts > maxAttempts)
{ {
@ -111,6 +119,15 @@ void FairMQDevice::InitWrapper()
fStateCondition.notify_one(); fStateCondition.notify_one();
} }
void FairMQDevice::WaitForInitialValidation()
{
boost::unique_lock<boost::mutex> lock(fInitialValidationMutex);
while (!fInitialValidationFinished)
{
fInitialValidationCondition.wait(lock);
}
}
void FairMQDevice::Init() void FairMQDevice::Init()
{ {
} }
@ -236,6 +253,8 @@ void FairMQDevice::PrintChannel(const string& name)
void FairMQDevice::RunWrapper() void FairMQDevice::RunWrapper()
{ {
LOG(INFO) << "DEVICE: Running...";
boost::thread rateLogger(boost::bind(&FairMQDevice::LogSocketRates, this)); boost::thread rateLogger(boost::bind(&FairMQDevice::LogSocketRates, this));
Run(); Run();

View File

@ -47,6 +47,8 @@ class FairMQDevice : public FairMQStateMachine, public FairMQConfigurable
void SortChannel(const std::string& name, const bool reindex = true); void SortChannel(const std::string& name, const bool reindex = true);
void PrintChannel(const std::string& name); void PrintChannel(const std::string& name);
void WaitForInitialValidation();
virtual void SetProperty(const int key, const std::string& value); virtual void SetProperty(const int key, const std::string& value);
virtual std::string GetProperty(const int key, const std::string& default_ = ""); virtual std::string GetProperty(const int key, const std::string& default_ = "");
virtual void SetProperty(const int key, const int value); virtual void SetProperty(const int key, const int value);
@ -101,6 +103,11 @@ class FairMQDevice : public FairMQStateMachine, public FairMQConfigurable
bool InitChannel(FairMQChannel&); bool InitChannel(FairMQChannel&);
private: private:
// condition variable to notify parent thread about end of initial validation.
bool fInitialValidationFinished;
boost::condition_variable fInitialValidationCondition;
boost::mutex fInitialValidationMutex;
/// Copy Constructor /// Copy Constructor
FairMQDevice(const FairMQDevice&); FairMQDevice(const FairMQDevice&);
FairMQDevice operator=(const FairMQDevice&); FairMQDevice operator=(const FairMQDevice&);