Skip to content

Commit d7f21ea

Browse files
mutex states synchronization (#203)
Signed-off-by: Alexey-N-Chernyshov <[email protected]>
1 parent eccf3d1 commit d7f21ea

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

core/fsm/fsm.hpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,8 @@ namespace fc::fsm {
304304
* @param entity_pointer - a shared pointer to the entity
305305
* @return entity state
306306
*/
307-
outcome::result<StateEnumType> get(const EntityPtr &entity_pointer) {
307+
outcome::result<StateEnumType> get(const EntityPtr &entity_pointer) const {
308+
std::lock_guard<std::mutex> lock(mutex_);
308309
auto lookup = states_.find(entity_pointer);
309310
if (states_.end() == lookup) {
310311
return FsmError::ENTITY_NOT_TRACKED;
@@ -318,6 +319,7 @@ namespace fc::fsm {
318319
* state
319320
*/
320321
std::unordered_map<EntityPtr, StateEnumType> list() const {
322+
std::lock_guard<std::mutex> lock(mutex_);
321323
return states_;
322324
}
323325

@@ -363,19 +365,17 @@ namespace fc::fsm {
363365
/// async events processor routine
364366
void onTimer() {
365367
EventQueueItem event_pair;
366-
{
367-
std::lock_guard<std::mutex> lock(mutex_);
368-
if (not running_) {
369-
return;
370-
}
371-
if (event_queue_.empty()) {
372-
scheduler_handle_.reschedule(kSlowModeDelayMs);
373-
return;
374-
}
375-
scheduler_handle_.reschedule(0);
376-
event_pair = event_queue_.front();
377-
event_queue_.pop();
368+
std::lock_guard<std::mutex> lock(mutex_);
369+
if (not running_) {
370+
return;
371+
}
372+
if (event_queue_.empty()) {
373+
scheduler_handle_.reschedule(kSlowModeDelayMs);
374+
return;
378375
}
376+
scheduler_handle_.reschedule(0);
377+
event_pair = event_queue_.front();
378+
event_queue_.pop();
379379
auto current_state = states_.find(event_pair.first);
380380
if (states_.end() == current_state) {
381381
return; // entity is not tracked
@@ -400,7 +400,7 @@ namespace fc::fsm {
400400
bool running_; ///< FSM is enabled to process events
401401
Scheduler::Ticks delay_; ///< minimum async loop delay
402402

403-
std::mutex mutex_;
403+
mutable std::mutex mutex_;
404404
std::queue<EventQueueItem> event_queue_;
405405
std::shared_ptr<Scheduler> scheduler_;
406406
Scheduler::Handle scheduler_handle_;

0 commit comments

Comments
 (0)