From 05d75c9cc5103941ea2e633442ef614e52816eda Mon Sep 17 00:00:00 2001 From: Julian Oes Date: Mon, 5 Aug 2024 19:09:37 +1200 Subject: [PATCH 1/2] action_server: Add missing mutex in command callbacks We are using internal shared plugin data that we need to protect by mutex. Hopefully, this fixes the test failures on macOS. --- src/mavsdk/plugins/action_server/action_server_impl.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/mavsdk/plugins/action_server/action_server_impl.cpp b/src/mavsdk/plugins/action_server/action_server_impl.cpp index 6eeb9ae85..85919b3a4 100644 --- a/src/mavsdk/plugins/action_server/action_server_impl.cpp +++ b/src/mavsdk/plugins/action_server/action_server_impl.cpp @@ -66,6 +66,8 @@ void ActionServerImpl::init() ActionServer::ArmDisarm armDisarm{ command.params.param1 == 1, command.params.param2 == 21196}; + std::lock_guard lock(_callback_mutex); + // Check arm states - Ugly. auto request_ack = MAV_RESULT_UNSUPPORTED; bool force = armDisarm.force; @@ -98,6 +100,8 @@ void ActionServerImpl::init() _server_component_impl->register_mavlink_command_handler( MAV_CMD_NAV_TAKEOFF, [this](const MavlinkCommandReceiver::CommandLong& command) { + std::lock_guard lock(_callback_mutex); + if (_allow_takeoff) { _takeoff_callbacks.queue( ActionServer::Result::Success, true, [this](const auto& func) { @@ -130,6 +134,8 @@ void ActionServerImpl::init() auto custom_mode = static_cast(command.params.param2); auto sub_custom_mode = static_cast(command.params.param3); + std::lock_guard lock(_callback_mutex); + if (is_custom) { // PX4 uses custom modes px4_custom_mode px4_mode{}; From 535576dc8651e4e5cc8807c6eb3c9995c690a464 Mon Sep 17 00:00:00 2001 From: Julian Oes Date: Mon, 5 Aug 2024 15:02:16 +1200 Subject: [PATCH 2/2] CI: fixup symlinks macOS tooling shifting from under you, it doesn't get much worse than that. --- .../tools/package_mavsdk_server_framework.bash | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/mavsdk_server/tools/package_mavsdk_server_framework.bash b/src/mavsdk_server/tools/package_mavsdk_server_framework.bash index 88dd8e5c9..f1b87ab0a 100644 --- a/src/mavsdk_server/tools/package_mavsdk_server_framework.bash +++ b/src/mavsdk_server/tools/package_mavsdk_server_framework.bash @@ -23,6 +23,9 @@ fi echo "Running lipo for simulator" mkdir -p ${IOS_SIM_FAT_BACKEND_DIR} cp -a ${IOS_SIM_X64_BACKEND_DIR}/mavsdk_server.framework ${IOS_SIM_FAT_BACKEND_DIR} +file ${IOS_SIM_X64_BACKEND_DIR}/mavsdk_server.framework/mavsdk_server +file ${IOS_SIM_ARM64_BACKEND_DIR}/mavsdk_server.framework/mavsdk_server + xcrun lipo -create -output ${IOS_SIM_FAT_BACKEND_DIR}/mavsdk_server.framework/mavsdk_server \ ${IOS_SIM_X64_BACKEND_DIR}/mavsdk_server.framework/mavsdk_server \ ${IOS_SIM_ARM64_BACKEND_DIR}/mavsdk_server.framework/mavsdk_server @@ -37,6 +40,12 @@ xcrun codesign --verbose --sign - ${IOS_SIM_FAT_BACKEND_DIR}/mavsdk_server.frame echo "Running lipo for macos" mkdir -p ${MACOS_FAT_BACKEND_DIR} cp -a ${MACOS_X64_BACKEND_DIR}/mavsdk_server.framework ${MACOS_FAT_BACKEND_DIR} +# Fix up symlinks that seem to break when github artifacts unzips the archives +ln -s -f ${MACOS_X64_BACKEND_DIR}/mavsdk_server.framework/Versions/Current/mavsdk_server ${MACOS_X64_BACKEND_DIR}/mavsdk_server.framework/mavsdk_server +ln -s -f ${MACOS_ARM64_BACKEND_DIR}/mavsdk_server.framework/Versions/Current/mavsdk_server ${MACOS_ARM64_BACKEND_DIR}/mavsdk_server.framework/mavsdk_server +file ${MACOS_X64_BACKEND_DIR}/mavsdk_server.framework/mavsdk_server +file ${MACOS_ARM64_BACKEND_DIR}/mavsdk_server.framework/mavsdk_server + xcrun lipo -create -output ${MACOS_FAT_BACKEND_DIR}/mavsdk_server.framework/mavsdk_server \ ${MACOS_X64_BACKEND_DIR}/mavsdk_server.framework/mavsdk_server \ ${MACOS_ARM64_BACKEND_DIR}/mavsdk_server.framework/mavsdk_server