From 1e84c2de6b9c237182fc9d8a051d421fc76740e9 Mon Sep 17 00:00:00 2001 From: mahima-yoga Date: Wed, 2 Jul 2025 11:12:23 +0200 Subject: [PATCH] (fix) mavlink_mission: avoid double-checking MissionResult by using SubscriptionData code was checking for an updated MissionResult twice in a row, leading to _mission_state not being set correctly when the second check had no new message. Switched to SubscriptionData to safely retrieve the latest message using .get(). --- src/modules/mavlink/mavlink_mission.cpp | 12 ++++-------- src/modules/mavlink/mavlink_mission.h | 2 +- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/modules/mavlink/mavlink_mission.cpp b/src/modules/mavlink/mavlink_mission.cpp index 00a466b2d5..78f8580b0d 100644 --- a/src/modules/mavlink/mavlink_mission.cpp +++ b/src/modules/mavlink/mavlink_mission.cpp @@ -499,9 +499,9 @@ MavlinkMissionManager::send() return; } - mission_result_s mission_result{}; - if (_mission_result_sub.update(&mission_result)) { + if (_mission_result_sub.update()) { + const mission_result_s &mission_result = _mission_result_sub.get(); if (_current_seq != mission_result.seq_current) { @@ -1925,11 +1925,7 @@ MavlinkMissionManager::update_mission_state() } // Get mission result - mission_result_s mission_result; - - if (!_mission_result_sub.update(&mission_result)) { - return; - } + const mission_result_s &mission_result = _mission_result_sub.get(); // Update mission mode if (vehicle_status.nav_state == vehicle_status_s::NAVIGATION_STATE_AUTO_MISSION || @@ -1953,7 +1949,7 @@ MavlinkMissionManager::update_mission_state() && vehicle_status.arming_state == vehicle_status_s::ARMING_STATE_ARMED) { _mission_state = MISSION_STATE_ACTIVE; - } else if (_mission_mode == MISSION_MODE_SUSPENDED && _last_reached >= 0) { + } else if (_mission_mode == MISSION_MODE_SUSPENDED && mission_result.seq_reached >= 0) { // Only PAUSED if we were actually in the middle of a mission _mission_state = MISSION_STATE_PAUSED; diff --git a/src/modules/mavlink/mavlink_mission.h b/src/modules/mavlink/mavlink_mission.h index 2c26dec266..9983b83590 100644 --- a/src/modules/mavlink/mavlink_mission.h +++ b/src/modules/mavlink/mavlink_mission.h @@ -148,7 +148,7 @@ private: static bool _transfer_in_progress; ///< Global variable checking for current transmission - uORB::Subscription _mission_result_sub{ORB_ID(mission_result)}; + uORB::SubscriptionData _mission_result_sub{ORB_ID(mission_result)}; uORB::SubscriptionData _mission_sub{ORB_ID(mission)}; uORB::Subscription _vehicle_status_sub{ORB_ID(vehicle_status)}; ///< vehicle status subscription