diff --git a/include/Module.h b/include/Module.h index 8942e98..49d967e 100644 --- a/include/Module.h +++ b/include/Module.h @@ -61,7 +61,7 @@ class Module { uint8_t m_device_id; ModuleType m_module_type; Messaging::ConnectionType m_connection_type; - uint8_t m_leader; + std::atomic m_leader{0}; std::chrono::time_point m_last_updated; std::vector m_neighbours; std::shared_ptr m_messaging_interface; diff --git a/include/libcontrol.h b/include/libcontrol.h index 2ea6248..c2b69d8 100644 --- a/include/libcontrol.h +++ b/include/libcontrol.h @@ -123,7 +123,7 @@ class RobotController { std::thread m_configuration_loop; std::thread m_sensor_loop; std::thread m_expiry_looop; - uint8_t m_selected_leader = 0; + std::atomic m_selected_leader{0}; void metadata_loop(); void transmit_loop(); diff --git a/src/lib_c_control.cpp b/src/lib_c_control.cpp index 9146bb1..34957f7 100644 --- a/src/lib_c_control.cpp +++ b/src/lib_c_control.cpp @@ -170,7 +170,9 @@ LIB_API bool remote_call_c(uint8_t function_tag, uint8_t module, const uint8_t * } LIB_API const uint8_t *get_leaders(int *length) { - static const auto leaders = robot_controller->get_leaders(); + static std::vector leaders; + leaders = robot_controller->get_leaders(); *length = leaders.size(); + spdlog::info("Returning {} leaders", *length); return leaders.data(); } diff --git a/src/libcontrol.cpp b/src/libcontrol.cpp index b8e8d42..bda7c2e 100644 --- a/src/libcontrol.cpp +++ b/src/libcontrol.cpp @@ -113,7 +113,7 @@ std::vector RobotController::getModuleList() { std::vector out; std::shared_lock lock(m_module_lock); for (auto const &[key, value] : m_id_to_module) { - out.push_back({key, value->get_type(), value->get_leader()}); + out.push_back({key, value->get_type(), 0, value->get_leader()}); } return out; } @@ -305,6 +305,7 @@ std::vector RobotController::get_leaders() { std::shared_lock lock(m_module_lock); std::unordered_set out{}; + spdlog::info("number of modules {}", m_id_to_module.size()); for (const auto m : map_to_values(m_id_to_module)) { out.insert(m->get_leader()); }