From f0b972fa02df0ce961661e05afe54e823ce95e2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gonz=C3=A1lez?= Date: Wed, 13 Jul 2022 07:26:08 +0200 Subject: [PATCH] Fix resetting of `LivelinessLostStatus::total_changes` (#2782) * Refs #14982. Fix `DataWriter::get_liveliness_lost_status()` * Apply suggestions from code review Co-authored-by: Eduardo Ponz Segrelles Co-authored-by: Eduardo Ponz Segrelles (cherry picked from commit b5f87dd5c696461fbbaef95e54a1c00a53da11d6) # Conflicts: # src/cpp/fastdds/publisher/DataWriterImpl.cpp Signed-off-by: JLBuenoLopez-eProsima --- src/cpp/fastdds/publisher/DataWriterImpl.cpp | 27 ++++++++++++++++++-- src/cpp/fastdds/publisher/DataWriterImpl.hpp | 14 +++++++++- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/cpp/fastdds/publisher/DataWriterImpl.cpp b/src/cpp/fastdds/publisher/DataWriterImpl.cpp index d9567455277..fc0c1c95c88 100644 --- a/src/cpp/fastdds/publisher/DataWriterImpl.cpp +++ b/src/cpp/fastdds/publisher/DataWriterImpl.cpp @@ -720,11 +720,20 @@ void DataWriterImpl::InnerDataWriterListener::on_liveliness_lost( fastrtps::rtps::RTPSWriter* /*writer*/, const fastrtps::LivelinessLostStatus& status) { +<<<<<<< HEAD DataWriterListener* listener = data_writer_->get_listener_for(StatusMask::liveliness_lost()); +======= + data_writer_->update_liveliness_lost_status(status); + StatusMask notify_status = StatusMask::liveliness_lost(); + DataWriterListener* listener = data_writer_->get_listener_for(notify_status); +>>>>>>> b5f87dd5c (Fix resetting of `LivelinessLostStatus::total_changes` (#2782)) if (listener != nullptr) { - listener->on_liveliness_lost( - data_writer_->user_datawriter_, status); + LivelinessLostStatus callback_status; + if (ReturnCode_t::RETCODE_OK == data_writer_->get_liveliness_lost_status(callback_status)) + { + listener->on_liveliness_lost(data_writer_->user_datawriter_, callback_status); + } } } @@ -869,10 +878,16 @@ ReturnCode_t DataWriterImpl::get_liveliness_lost_status( std::unique_lock lock(writer_->getMutex()); +<<<<<<< HEAD status.total_count = writer_->liveliness_lost_status_.total_count; status.total_count_change = writer_->liveliness_lost_status_.total_count_change; writer_->liveliness_lost_status_.total_count_change = 0u; +======= + status = liveliness_lost_status_; + liveliness_lost_status_.total_count_change = 0u; + } +>>>>>>> b5f87dd5c (Fix resetting of `LivelinessLostStatus::total_changes` (#2782)) return ReturnCode_t::RETCODE_OK; } @@ -952,6 +967,14 @@ OfferedIncompatibleQosStatus& DataWriterImpl::update_offered_incompatible_qos( return offered_incompatible_qos_status_; } +LivelinessLostStatus& DataWriterImpl::update_liveliness_lost_status( + const fastrtps::LivelinessLostStatus& liveliness_lost_status) +{ + liveliness_lost_status_.total_count = liveliness_lost_status.total_count; + liveliness_lost_status_.total_count_change += liveliness_lost_status.total_count_change; + return liveliness_lost_status_; +} + void DataWriterImpl::set_qos( DataWriterQos& to, const DataWriterQos& from, diff --git a/src/cpp/fastdds/publisher/DataWriterImpl.hpp b/src/cpp/fastdds/publisher/DataWriterImpl.hpp index 939566bb3bf..768af9339e8 100644 --- a/src/cpp/fastdds/publisher/DataWriterImpl.hpp +++ b/src/cpp/fastdds/publisher/DataWriterImpl.hpp @@ -294,7 +294,10 @@ class DataWriterImpl fastrtps::rtps::InstanceHandle_t timer_owner_; //! The offered deadline missed status - fastrtps::OfferedDeadlineMissedStatus deadline_missed_status_; + OfferedDeadlineMissedStatus deadline_missed_status_; + + //! The liveliness lost status + LivelinessLostStatus liveliness_lost_status_; //! The offered incompatible qos status OfferedIncompatibleQosStatus offered_incompatible_qos_status_; @@ -398,6 +401,15 @@ class DataWriterImpl OfferedIncompatibleQosStatus& update_offered_incompatible_qos( PolicyMask incompatible_policies); + /*! + * @brief Updates liveliness lost status. + * + * @param[in] liveliness_lost_status Liveliness lost status coming from RTPS layer. + * @return Current liveliness lost status. + */ + LivelinessLostStatus& update_liveliness_lost_status( + const fastrtps::LivelinessLostStatus& liveliness_lost_status); + /** * Returns the most appropriate listener to handle the callback for the given status, * or nullptr if there is no appropriate listener.