From a152226f50d8268b3c1976fbbbfa9dadbc4f52e8 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Sat, 2 Dec 2023 12:54:28 +0100 Subject: [PATCH] Fix potenctial data race condition --- src/algorithms/channel/adapters/channel.cc | 7 +++++++ src/algorithms/channel/adapters/channel.h | 2 +- src/core/interfaces/channel_interface.h | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/algorithms/channel/adapters/channel.cc b/src/algorithms/channel/adapters/channel.cc index 69b84ca0c..444eef958 100644 --- a/src/algorithms/channel/adapters/channel.cc +++ b/src/algorithms/channel/adapters/channel.cc @@ -212,6 +212,13 @@ gr::basic_block_sptr Channel::get_right_block() } +Gnss_Signal Channel::get_signal() +{ + std::lock_guard lk(mx_); + return gnss_signal_; +} + + void Channel::set_signal(const Gnss_Signal& gnss_signal) { std::lock_guard lk(mx_); diff --git a/src/algorithms/channel/adapters/channel.h b/src/algorithms/channel/adapters/channel.h index a8e80123a..834cc5cd7 100644 --- a/src/algorithms/channel/adapters/channel.h +++ b/src/algorithms/channel/adapters/channel.h @@ -84,7 +84,7 @@ public: inline std::string role() override { return role_; } inline std::string implementation() override { return std::string("Channel"); } //!< Returns "Channel" inline size_t item_size() override { return 2 * sizeof(float); } - inline Gnss_Signal get_signal() const override { return gnss_signal_; } + Gnss_Signal get_signal() override; void start_acquisition() override; //!< Start the State Machine void stop_channel() override; //!< Stop the State Machine void set_signal(const Gnss_Signal& gnss_signal_) override; //!< Sets the channel GNSS signal diff --git a/src/core/interfaces/channel_interface.h b/src/core/interfaces/channel_interface.h index da0da3ccc..9224ed0e3 100644 --- a/src/core/interfaces/channel_interface.h +++ b/src/core/interfaces/channel_interface.h @@ -49,7 +49,7 @@ public: virtual gr::basic_block_sptr get_right_block_acq() = 0; virtual gr::basic_block_sptr get_left_block() = 0; virtual gr::basic_block_sptr get_right_block() = 0; - virtual Gnss_Signal get_signal() const = 0; + virtual Gnss_Signal get_signal() = 0; virtual void start_acquisition() = 0; virtual void assist_acquisition_doppler(double Carrier_Doppler_hz) = 0; virtual void stop_channel() = 0;