mirror of
https://github.com/FairRootGroup/FairMQ.git
synced 2025-10-13 00:31:14 +00:00
Fix race condition in the state machine & channel.
This commit is contained in:
parent
94a4d599eb
commit
12f04c7237
|
@ -539,6 +539,7 @@ bool FairMQChannel::InitCommandInterface(FairMQTransportFactory* factory, int nu
|
||||||
|
|
||||||
void FairMQChannel::ResetChannel()
|
void FairMQChannel::ResetChannel()
|
||||||
{
|
{
|
||||||
|
boost::unique_lock<boost::mutex> scoped_lock(fChannelMutex);
|
||||||
fIsValid = false;
|
fIsValid = false;
|
||||||
// TODO: implement channel resetting
|
// TODO: implement channel resetting
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,6 +133,7 @@ void FairMQStateMachine::WaitForEndOfState(int event)
|
||||||
{
|
{
|
||||||
fStateCondition.wait(lock);
|
fStateCondition.wait(lock);
|
||||||
}
|
}
|
||||||
|
fStateThread.join();
|
||||||
}
|
}
|
||||||
catch (boost::exception& e)
|
catch (boost::exception& e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -250,8 +250,8 @@ struct FairMQFSM_ : public msm::front::state_machine_def<FairMQFSM_>
|
||||||
template <class EVT, class FSM, class SourceState, class TargetState>
|
template <class EVT, class FSM, class SourceState, class TargetState>
|
||||||
void operator()(EVT const&, FSM& fsm, SourceState&, TargetState&)
|
void operator()(EVT const&, FSM& fsm, SourceState&, TargetState&)
|
||||||
{
|
{
|
||||||
LOG(STATE) << "RUNNING state finished without an external event, going to IDLE";
|
LOG(STATE) << "RUNNING state finished without an external event";
|
||||||
|
LOG(STATE) << "Entering READY state";
|
||||||
fsm.fState = READY;
|
fsm.fState = READY;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -380,7 +380,7 @@ struct FairMQFSM_ : public msm::front::state_machine_def<FairMQFSM_>
|
||||||
std::size_t pos = stateName.find("_FSME");
|
std::size_t pos = stateName.find("_FSME");
|
||||||
stateName.erase(pos);
|
stateName.erase(pos);
|
||||||
|
|
||||||
if (stateName == "1RUNNING" || stateName == "6DEVICE_READY" || stateName == "0PAUSED")
|
if (stateName == "1RUNNING" || stateName == "6DEVICE_READY" || stateName == "0PAUSED" || stateName == "8RESETTING_TASK")
|
||||||
{
|
{
|
||||||
stateName = stateName.substr(1);
|
stateName = stateName.substr(1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <condition_variable>
|
#include <condition_variable>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
#include <set>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace dds::intercom_api;
|
using namespace dds::intercom_api;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user