@@ -304,7 +304,8 @@ namespace fc::fsm {
304
304
* @param entity_pointer - a shared pointer to the entity
305
305
* @return entity state
306
306
*/
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_);
308
309
auto lookup = states_.find (entity_pointer);
309
310
if (states_.end () == lookup) {
310
311
return FsmError::ENTITY_NOT_TRACKED;
@@ -318,6 +319,7 @@ namespace fc::fsm {
318
319
* state
319
320
*/
320
321
std::unordered_map<EntityPtr, StateEnumType> list () const {
322
+ std::lock_guard<std::mutex> lock (mutex_);
321
323
return states_;
322
324
}
323
325
@@ -363,19 +365,17 @@ namespace fc::fsm {
363
365
// / async events processor routine
364
366
void onTimer () {
365
367
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 ;
378
375
}
376
+ scheduler_handle_.reschedule (0 );
377
+ event_pair = event_queue_.front ();
378
+ event_queue_.pop ();
379
379
auto current_state = states_.find (event_pair.first );
380
380
if (states_.end () == current_state) {
381
381
return ; // entity is not tracked
@@ -400,7 +400,7 @@ namespace fc::fsm {
400
400
bool running_; // /< FSM is enabled to process events
401
401
Scheduler::Ticks delay_; // /< minimum async loop delay
402
402
403
- std::mutex mutex_;
403
+ mutable std::mutex mutex_;
404
404
std::queue<EventQueueItem> event_queue_;
405
405
std::shared_ptr<Scheduler> scheduler_;
406
406
Scheduler::Handle scheduler_handle_;
0 commit comments