From c898d85d05e41814acade9eccd2b3e3f52bdfb8d Mon Sep 17 00:00:00 2001 From: Miguel Company Date: Mon, 24 Jun 2024 10:24:39 +0200 Subject: [PATCH] Refs #21189. Fix StatelessReader. Signed-off-by: Miguel Company --- src/cpp/rtps/reader/StatelessReader.cpp | 61 +++++++++++++------------ 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/src/cpp/rtps/reader/StatelessReader.cpp b/src/cpp/rtps/reader/StatelessReader.cpp index 86c07c2ff65..6f81edd2629 100644 --- a/src/cpp/rtps/reader/StatelessReader.cpp +++ b/src/cpp/rtps/reader/StatelessReader.cpp @@ -230,33 +230,8 @@ bool StatelessReader::matched_writer_remove( const GUID_t& writer_guid, bool removed_by_lease) { - if (liveliness_lease_duration_ < c_TimeInfinite) - { - auto wlp = mp_RTPSParticipant->wlp(); - if ( wlp != nullptr) - { - LivelinessData::WriterStatus writer_liveliness_status; - wlp->sub_liveliness_manager_->remove_writer( - writer_guid, - liveliness_kind_, - liveliness_lease_duration_, - writer_liveliness_status); + bool ret_val = false; - if (writer_liveliness_status == LivelinessData::WriterStatus::ALIVE) - { - update_liveliness_changed_status(writer_guid, -1, 0); - } - else if (writer_liveliness_status == LivelinessData::WriterStatus::NOT_ALIVE) - { - update_liveliness_changed_status(writer_guid, 0, -1); - } - } - else - { - EPROSIMA_LOG_ERROR(RTPS_LIVELINESS, - "Finite liveliness lease duration but WLP not enabled, cannot remove writer"); - } - } { std::unique_lock guard(mp_mutex); @@ -296,11 +271,41 @@ bool StatelessReader::matched_writer_remove( } #endif //FASTDDS_STATISTICS - return true; + ret_val = true; + break; } } } - return false; + + if (ret_val && liveliness_lease_duration_ < c_TimeInfinite) + { + auto wlp = mp_RTPSParticipant->wlp(); + if ( wlp != nullptr) + { + LivelinessData::WriterStatus writer_liveliness_status; + wlp->sub_liveliness_manager_->remove_writer( + writer_guid, + liveliness_kind_, + liveliness_lease_duration_, + writer_liveliness_status); + + if (writer_liveliness_status == LivelinessData::WriterStatus::ALIVE) + { + update_liveliness_changed_status(writer_guid, -1, 0); + } + else if (writer_liveliness_status == LivelinessData::WriterStatus::NOT_ALIVE) + { + update_liveliness_changed_status(writer_guid, 0, -1); + } + } + else + { + EPROSIMA_LOG_ERROR(RTPS_LIVELINESS, + "Finite liveliness lease duration but WLP not enabled, cannot remove writer"); + } + } + + return ret_val; } bool StatelessReader::matched_writer_is_matched(