From b0035e5704f912abf6dbdf1aca0e5cdaa56956be Mon Sep 17 00:00:00 2001 From: Julian Oes Date: Tue, 3 Sep 2019 16:34:29 +0200 Subject: [PATCH] mavlink: prevent race if shut down immediately If we do mavlink stop-all right after mavlink start, we do a perf_free before actually having stopped the threads accessing the perf counters. --- src/modules/mavlink/mavlink_main.cpp | 9 +++------ src/modules/mavlink/mavlink_main.h | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/modules/mavlink/mavlink_main.cpp b/src/modules/mavlink/mavlink_main.cpp index b40db93711..4813fe20dc 100644 --- a/src/modules/mavlink/mavlink_main.cpp +++ b/src/modules/mavlink/mavlink_main.cpp @@ -183,9 +183,6 @@ Mavlink::Mavlink() : Mavlink::~Mavlink() { - perf_free(_loop_perf); - perf_free(_loop_interval_perf); - if (_task_running) { /* task wakes up every 10ms or so at the longest */ _task_should_exit = true; @@ -205,6 +202,9 @@ Mavlink::~Mavlink() } } while (_task_running); } + + perf_free(_loop_perf); + perf_free(_loop_interval_perf); } void @@ -2458,9 +2458,6 @@ Mavlink::task_main(int argc, char *argv[]) } perf_end(_loop_perf); - - /* confirm task running only once fully initialized */ - _task_running = true; } /* first wait for threads to complete before tearing down anything */ diff --git a/src/modules/mavlink/mavlink_main.h b/src/modules/mavlink/mavlink_main.h index 12d1c07573..a73ec6649e 100644 --- a/src/modules/mavlink/mavlink_main.h +++ b/src/modules/mavlink/mavlink_main.h @@ -546,7 +546,7 @@ private: uORB::PublicationQueued _telem_status_pub{ORB_ID(telemetry_status)}; - bool _task_running{false}; + bool _task_running{true}; static bool _boot_complete; static constexpr int MAVLINK_MAX_INSTANCES{4}; static constexpr int MAVLINK_MIN_INTERVAL{1500};