diff --git a/ear-production-suite-plugins/lib/include/communication/direct_speakers_metadata_sender.hpp b/ear-production-suite-plugins/lib/include/communication/direct_speakers_metadata_sender.hpp index 52068a14c..420f9312f 100644 --- a/ear-production-suite-plugins/lib/include/communication/direct_speakers_metadata_sender.hpp +++ b/ear-production-suite-plugins/lib/include/communication/direct_speakers_metadata_sender.hpp @@ -40,6 +40,12 @@ class DirectSpeakersMetadataSender { void startTimer(); MessageBuffer getMessage(); void handleTimeout(std::error_code ec); + template + void setData(FunctionT&& set) { + std::lock_guard dataLock{dataMutex_}; + data_.set_changed(true); + set(&data_); + } std::shared_ptr logger_; nng::PushSocket socket_; diff --git a/ear-production-suite-plugins/lib/src/communication/direct_speakers_metadata_sender.cpp b/ear-production-suite-plugins/lib/src/communication/direct_speakers_metadata_sender.cpp index c65cc05dd..8f91f4c27 100644 --- a/ear-production-suite-plugins/lib/src/communication/direct_speakers_metadata_sender.cpp +++ b/ear-production-suite-plugins/lib/src/communication/direct_speakers_metadata_sender.cpp @@ -109,23 +109,19 @@ void DirectSpeakersMetadataSender::handleTimeout(std::error_code ec) { } void DirectSpeakersMetadataSender::routing(int32_t value) { - std::lock_guard lock(dataMutex_); - data_.set_changed(true); - data_.set_routing(value); + setData([value](auto data) { data->set_routing(value); }); } void DirectSpeakersMetadataSender::name(const std::string& value) { - std::lock_guard lock(dataMutex_); - data_.set_name(value); + setData([&value](auto data) { data->set_name(value); }); } void DirectSpeakersMetadataSender::colour(int value) { - std::lock_guard lock(dataMutex_); - data_.set_colour(value); + setData([value](auto data) { data->set_colour(value); }); } void DirectSpeakersMetadataSender::speakerSetupIndex(int value) { - std::lock_guard lock(dataMutex_); - data_.set_changed(true); - data_.set_allocated_ds_metadata( - proto::convertSpeakerSetupToEpsMetadata(value)); + setData([value](auto data) { + data->set_allocated_ds_metadata( + proto::convertSpeakerSetupToEpsMetadata(value)); + }); } } // namespace communication