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)
, fCommandSocket()
, 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;
if (numAttempts > maxAttempts)
{
@ -111,6 +119,15 @@ void FairMQDevice::InitWrapper()
fStateCondition.notify_one();
}
void FairMQDevice::WaitForInitialValidation()
{
boost::unique_lock<boost::mutex> 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();

View File

@ -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&);