Skip to content

Commit

Permalink
output drivers: init SmartLock after exit_and_cleanup
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
bkueng authored and dagar committed May 12, 2022
1 parent 0a9378e commit 9166b69
Show file tree
Hide file tree
Showing 7 changed files with 14 additions and 14 deletions.
4 changes: 2 additions & 2 deletions src/drivers/dshot/DShot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -498,8 +498,6 @@ bool DShot::updateOutputs(bool stop_motors, uint16_t outputs[MAX_ACTUATORS],

void DShot::Run()
{
SmartLock lock_guard(_lock);

if (should_exit()) {
ScheduleClear();
_mixing_output.unregister();
Expand All @@ -508,6 +506,8 @@ void DShot::Run()
return;
}

SmartLock lock_guard(_lock);

perf_begin(_cycle_perf);

_mixing_output.update();
Expand Down
4 changes: 2 additions & 2 deletions src/drivers/linux_pwm_out/linux_pwm_out.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,6 @@ bool LinuxPWMOut::updateOutputs(bool stop_motors, uint16_t outputs[MAX_ACTUATORS

void LinuxPWMOut::Run()
{
SmartLock lock_guard(_lock);

if (should_exit()) {
ScheduleClear();
_mixing_output.unregister();
Expand All @@ -136,6 +134,8 @@ void LinuxPWMOut::Run()
return;
}

SmartLock lock_guard(_lock);

perf_begin(_cycle_perf);
perf_count(_interval_perf);

Expand Down
4 changes: 2 additions & 2 deletions src/drivers/pca9685_pwm_out/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -376,8 +376,6 @@ bool PCA9685Wrapper::updateOutputs(bool stop_motors, uint16_t *outputs, unsigned

void PCA9685Wrapper::Run()
{
SmartLock lock_guard(_lock);

if (should_exit()) {
ScheduleClear();
_mixing_output.unregister();
Expand All @@ -391,6 +389,8 @@ void PCA9685Wrapper::Run()
return;
}

SmartLock lock_guard(_lock);

perf_begin(_cycle_perf);

switch (_state) {
Expand Down
4 changes: 2 additions & 2 deletions src/drivers/pwm_out/PWMOut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -439,8 +439,6 @@ bool PWMOut::updateOutputs(bool stop_motors, uint16_t outputs[MAX_ACTUATORS],

void PWMOut::Run()
{
SmartLock lock_guard(_lock);

if (should_exit()) {
ScheduleClear();
_mixing_output.unregister();
Expand All @@ -449,6 +447,8 @@ void PWMOut::Run()
return;
}

SmartLock lock_guard(_lock);

perf_begin(_cycle_perf);
perf_count(_interval_perf);

Expand Down
4 changes: 2 additions & 2 deletions src/drivers/pwm_out_sim/PWMSim.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,6 @@ PWMSim::PWMSim(bool hil_mode_enabled) :
void
PWMSim::Run()
{
SmartLock lock_guard(_lock);

if (should_exit()) {
ScheduleClear();
_mixing_output.unregister();
Expand All @@ -68,6 +66,8 @@ PWMSim::Run()
return;
}

SmartLock lock_guard(_lock);

_mixing_output.update();

// check for parameter updates
Expand Down
4 changes: 2 additions & 2 deletions src/drivers/px4io/px4io.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -525,8 +525,6 @@ void PX4IO::updateFailsafe()

void PX4IO::Run()
{
SmartLock lock_guard(_lock);

if (should_exit()) {
ScheduleClear();
_mixing_output.unregister();
Expand All @@ -535,6 +533,8 @@ void PX4IO::Run()
return;
}

SmartLock lock_guard(_lock);

perf_begin(_cycle_perf);
perf_count(_interval_perf);

Expand Down
4 changes: 2 additions & 2 deletions src/drivers/tap_esc/TAP_ESC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -329,8 +329,6 @@ bool TAP_ESC::updateOutputs(bool stop_motors, uint16_t outputs[MAX_ACTUATORS], u

void TAP_ESC::Run()
{
SmartLock lock_guard(_lock);

if (should_exit()) {
ScheduleClear();
_mixing_output.unregister();
Expand All @@ -339,6 +337,8 @@ void TAP_ESC::Run()
return;
}

SmartLock lock_guard(_lock);

// push backup schedule
ScheduleDelayed(20_ms);

Expand Down

0 comments on commit 9166b69

Please sign in to comment.