mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-07-18 10:30:35 +08:00
fix commander: set failsafe action state immediately after failsafe update
There was a race condition: for example when an external mode disabled failsafe deferring, that then triggered a failsafe, while the mode executor immediately sends a command (to e.g. switch modes). In that case the failsafe got triggered but the mode switch was still allowed. This was because of the processing ordering: - mode updates (and propagating the failsafe_action_active state) - failsafe updates - command handling This patch makes sure failsafe_action_active is set immediately after updating the failsafes.
This commit is contained in:
@@ -138,7 +138,11 @@ public:
|
||||
bool control_setpoint_update{false};
|
||||
};
|
||||
|
||||
void update(bool armed, uint8_t user_intended_nav_state, bool failsafe_action_active, UpdateRequest &update_request);
|
||||
void update(bool armed, uint8_t user_intended_nav_state, UpdateRequest &update_request);
|
||||
void setFailsafeState(bool failsafe_action_active)
|
||||
{
|
||||
_failsafe_action_active = failsafe_action_active;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mode executor ID for who is currently in charge (and can send commands etc).
|
||||
@@ -198,7 +202,8 @@ public:
|
||||
bool control_setpoint_update{false};
|
||||
};
|
||||
|
||||
void update(bool armed, uint8_t user_intended_nav_state, bool failsafe_action_active, UpdateRequest &update_request) {}
|
||||
void update(bool armed, uint8_t user_intended_nav_state, UpdateRequest &update_request) {}
|
||||
void setFailsafeState(bool failsafe_action_active) {}
|
||||
|
||||
int modeExecutorInCharge() const { return ModeExecutors::AUTOPILOT_EXECUTOR_ID; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user