mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-30 09:23:33 +08:00
output drivers: init SmartLock after exit_and_cleanup
This fixes an invalid memory access when exiting the module: exit_and_cleanup destroys the object, but lock_guard is destructed after and accesses the lock.
This commit is contained in:
@@ -498,8 +498,6 @@ bool DShot::updateOutputs(bool stop_motors, uint16_t outputs[MAX_ACTUATORS],
|
|||||||
|
|
||||||
void DShot::Run()
|
void DShot::Run()
|
||||||
{
|
{
|
||||||
SmartLock lock_guard(_lock);
|
|
||||||
|
|
||||||
if (should_exit()) {
|
if (should_exit()) {
|
||||||
ScheduleClear();
|
ScheduleClear();
|
||||||
_mixing_output.unregister();
|
_mixing_output.unregister();
|
||||||
@@ -508,6 +506,8 @@ void DShot::Run()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SmartLock lock_guard(_lock);
|
||||||
|
|
||||||
perf_begin(_cycle_perf);
|
perf_begin(_cycle_perf);
|
||||||
|
|
||||||
_mixing_output.update();
|
_mixing_output.update();
|
||||||
|
|||||||
@@ -126,8 +126,6 @@ bool LinuxPWMOut::updateOutputs(bool stop_motors, uint16_t outputs[MAX_ACTUATORS
|
|||||||
|
|
||||||
void LinuxPWMOut::Run()
|
void LinuxPWMOut::Run()
|
||||||
{
|
{
|
||||||
SmartLock lock_guard(_lock);
|
|
||||||
|
|
||||||
if (should_exit()) {
|
if (should_exit()) {
|
||||||
ScheduleClear();
|
ScheduleClear();
|
||||||
_mixing_output.unregister();
|
_mixing_output.unregister();
|
||||||
@@ -136,6 +134,8 @@ void LinuxPWMOut::Run()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SmartLock lock_guard(_lock);
|
||||||
|
|
||||||
perf_begin(_cycle_perf);
|
perf_begin(_cycle_perf);
|
||||||
perf_count(_interval_perf);
|
perf_count(_interval_perf);
|
||||||
|
|
||||||
|
|||||||
@@ -376,8 +376,6 @@ bool PCA9685Wrapper::updateOutputs(bool stop_motors, uint16_t *outputs, unsigned
|
|||||||
|
|
||||||
void PCA9685Wrapper::Run()
|
void PCA9685Wrapper::Run()
|
||||||
{
|
{
|
||||||
SmartLock lock_guard(_lock);
|
|
||||||
|
|
||||||
if (should_exit()) {
|
if (should_exit()) {
|
||||||
ScheduleClear();
|
ScheduleClear();
|
||||||
_mixing_output.unregister();
|
_mixing_output.unregister();
|
||||||
@@ -391,6 +389,8 @@ void PCA9685Wrapper::Run()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SmartLock lock_guard(_lock);
|
||||||
|
|
||||||
perf_begin(_cycle_perf);
|
perf_begin(_cycle_perf);
|
||||||
|
|
||||||
switch (_state) {
|
switch (_state) {
|
||||||
|
|||||||
@@ -439,8 +439,6 @@ bool PWMOut::updateOutputs(bool stop_motors, uint16_t outputs[MAX_ACTUATORS],
|
|||||||
|
|
||||||
void PWMOut::Run()
|
void PWMOut::Run()
|
||||||
{
|
{
|
||||||
SmartLock lock_guard(_lock);
|
|
||||||
|
|
||||||
if (should_exit()) {
|
if (should_exit()) {
|
||||||
ScheduleClear();
|
ScheduleClear();
|
||||||
_mixing_output.unregister();
|
_mixing_output.unregister();
|
||||||
@@ -449,6 +447,8 @@ void PWMOut::Run()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SmartLock lock_guard(_lock);
|
||||||
|
|
||||||
perf_begin(_cycle_perf);
|
perf_begin(_cycle_perf);
|
||||||
perf_count(_interval_perf);
|
perf_count(_interval_perf);
|
||||||
|
|
||||||
|
|||||||
@@ -58,8 +58,6 @@ PWMSim::PWMSim(bool hil_mode_enabled) :
|
|||||||
void
|
void
|
||||||
PWMSim::Run()
|
PWMSim::Run()
|
||||||
{
|
{
|
||||||
SmartLock lock_guard(_lock);
|
|
||||||
|
|
||||||
if (should_exit()) {
|
if (should_exit()) {
|
||||||
ScheduleClear();
|
ScheduleClear();
|
||||||
_mixing_output.unregister();
|
_mixing_output.unregister();
|
||||||
@@ -68,6 +66,8 @@ PWMSim::Run()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SmartLock lock_guard(_lock);
|
||||||
|
|
||||||
_mixing_output.update();
|
_mixing_output.update();
|
||||||
|
|
||||||
// check for parameter updates
|
// check for parameter updates
|
||||||
|
|||||||
@@ -525,8 +525,6 @@ void PX4IO::updateFailsafe()
|
|||||||
|
|
||||||
void PX4IO::Run()
|
void PX4IO::Run()
|
||||||
{
|
{
|
||||||
SmartLock lock_guard(_lock);
|
|
||||||
|
|
||||||
if (should_exit()) {
|
if (should_exit()) {
|
||||||
ScheduleClear();
|
ScheduleClear();
|
||||||
_mixing_output.unregister();
|
_mixing_output.unregister();
|
||||||
@@ -535,6 +533,8 @@ void PX4IO::Run()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SmartLock lock_guard(_lock);
|
||||||
|
|
||||||
perf_begin(_cycle_perf);
|
perf_begin(_cycle_perf);
|
||||||
perf_count(_interval_perf);
|
perf_count(_interval_perf);
|
||||||
|
|
||||||
|
|||||||
@@ -329,8 +329,6 @@ bool TAP_ESC::updateOutputs(bool stop_motors, uint16_t outputs[MAX_ACTUATORS], u
|
|||||||
|
|
||||||
void TAP_ESC::Run()
|
void TAP_ESC::Run()
|
||||||
{
|
{
|
||||||
SmartLock lock_guard(_lock);
|
|
||||||
|
|
||||||
if (should_exit()) {
|
if (should_exit()) {
|
||||||
ScheduleClear();
|
ScheduleClear();
|
||||||
_mixing_output.unregister();
|
_mixing_output.unregister();
|
||||||
@@ -339,6 +337,8 @@ void TAP_ESC::Run()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SmartLock lock_guard(_lock);
|
||||||
|
|
||||||
// push backup schedule
|
// push backup schedule
|
||||||
ScheduleDelayed(20_ms);
|
ScheduleDelayed(20_ms);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user