diff --git a/src/cpp/fastdds/publisher/DataWriterImpl.cpp b/src/cpp/fastdds/publisher/DataWriterImpl.cpp index 3837107fbbc..ee94db1b82d 100644 --- a/src/cpp/fastdds/publisher/DataWriterImpl.cpp +++ b/src/cpp/fastdds/publisher/DataWriterImpl.cpp @@ -1192,6 +1192,21 @@ void DataWriterImpl::InnerDataWriterListener::onWriterMatched( const PublicationMatchedStatus& info) { data_writer_->update_publication_matched_status(info); + + StatusMask notify_status = StatusMask::publication_matched(); + DataWriterListener* listener = data_writer_->get_listener_for(notify_status); + if (listener != nullptr) + { + PublicationMatchedStatus callback_status; + if (ReturnCode_t::RETCODE_OK == data_writer_->get_publication_matched_status(callback_status)) + { + listener->on_publication_matched(data_writer_->user_datawriter_, callback_status); + } + } + else + { + data_writer_->user_datawriter_->get_statuscondition().get_impl()->set_status(notify_status, true); + } } void DataWriterImpl::InnerDataWriterListener::on_offered_incompatible_qos( @@ -1337,16 +1352,6 @@ void DataWriterImpl::update_publication_matched_status( publication_matched_status_.total_count_change += count_change; } publication_matched_status_.last_subscription_handle = status.last_subscription_handle; - - StatusMask notify_status = StatusMask::publication_matched(); - DataWriterListener* listener = get_listener_for(notify_status); - if (listener != nullptr) - { - listener->on_publication_matched(user_datawriter_, publication_matched_status_); - publication_matched_status_.current_count_change = 0; - publication_matched_status_.total_count_change = 0; - } - user_datawriter_->get_statuscondition().get_impl()->set_status(notify_status, true); } ReturnCode_t DataWriterImpl::get_publication_matched_status( diff --git a/src/cpp/fastdds/subscriber/DataReaderImpl.cpp b/src/cpp/fastdds/subscriber/DataReaderImpl.cpp index 6150a808123..0cc01c90bc0 100644 --- a/src/cpp/fastdds/subscriber/DataReaderImpl.cpp +++ b/src/cpp/fastdds/subscriber/DataReaderImpl.cpp @@ -913,6 +913,21 @@ void DataReaderImpl::InnerDataReaderListener::onReaderMatched( const SubscriptionMatchedStatus& info) { data_reader_->update_subscription_matched_status(info); + + StatusMask notify_status = StatusMask::subscription_matched(); + DataReaderListener* listener = data_reader_->get_listener_for(notify_status); + if (listener != nullptr) + { + SubscriptionMatchedStatus callback_status; + if (ReturnCode_t::RETCODE_OK == data_reader_->get_subscription_matched_status(callback_status)) + { + listener->on_subscription_matched(data_reader_->user_datareader_, callback_status); + } + } + else + { + data_reader_->user_datareader_->get_statuscondition().get_impl()->set_status(notify_status, true); + } } void DataReaderImpl::InnerDataReaderListener::on_liveliness_changed( @@ -1100,16 +1115,6 @@ void DataReaderImpl::update_subscription_matched_status( history_.writer_not_alive(iHandle2GUID(status.last_publication_handle)); try_notify_read_conditions(); } - - StatusMask notify_status = StatusMask::subscription_matched(); - DataReaderListener* listener = get_listener_for(notify_status); - if (listener != nullptr) - { - listener->on_subscription_matched(user_datareader_, subscription_matched_status_); - subscription_matched_status_.current_count_change = 0; - subscription_matched_status_.total_count_change = 0; - } - user_datareader_->get_statuscondition().get_impl()->set_status(notify_status, true); } ReturnCode_t DataReaderImpl::get_subscription_matched_status(