@@ -388,28 +388,6 @@ bool DataReaderImpl::wait_for_unread_message(
388388void DataReaderImpl::set_read_communication_status (
389389 bool trigger_value)
390390{
391- if (trigger_value)
392- {
393- auto user_reader = user_datareader_;
394-
395- // First check if we can handle with on_data_on_readers
396- SubscriberListener* subscriber_listener =
397- subscriber_->get_listener_for (StatusMask::data_on_readers ());
398- if (subscriber_listener != nullptr )
399- {
400- subscriber_listener->on_data_on_readers (subscriber_->user_subscriber_ );
401- }
402- else
403- {
404- // If not, try with on_data_available
405- DataReaderListener* listener = get_listener_for (StatusMask::data_available ());
406- if (listener != nullptr )
407- {
408- listener->on_data_available (user_reader);
409- }
410- }
411- }
412-
413391 StatusMask notify_status = StatusMask::data_on_readers ();
414392 subscriber_->user_subscriber_ ->get_statuscondition ().get_impl ()->set_status (notify_status, trigger_value);
415393
@@ -741,6 +719,11 @@ ReturnCode_t DataReaderImpl::read_or_take_next_sample(
741719 return RETCODE_NOT_ENABLED;
742720 }
743721
722+ if (history_.getHistorySize () == 0 )
723+ {
724+ return RETCODE_NO_DATA;
725+ }
726+
744727#if HAVE_STRICT_REALTIME
745728 auto max_blocking_time = std::chrono::steady_clock::now () +
746729 std::chrono::microseconds (::TimeConv::Time_t2MicroSecondsInt64 (qos_.reliability ().max_blocking_time ));
@@ -935,6 +918,25 @@ void DataReaderImpl::InnerDataReaderListener::on_data_available(
935918
936919 if (data_reader_->on_data_available (writer_guid, first_sequence, last_sequence))
937920 {
921+ auto user_reader = data_reader_->user_datareader_ ;
922+
923+ // First check if we can handle with on_data_on_readers
924+ SubscriberListener* subscriber_listener =
925+ data_reader_->subscriber_ ->get_listener_for (StatusMask::data_on_readers ());
926+ if (subscriber_listener != nullptr )
927+ {
928+ subscriber_listener->on_data_on_readers (data_reader_->subscriber_ ->user_subscriber_ );
929+ }
930+ else
931+ {
932+ // If not, try with on_data_available
933+ DataReaderListener* listener = data_reader_->get_listener_for (StatusMask::data_available ());
934+ if (listener != nullptr )
935+ {
936+ listener->on_data_available (user_reader);
937+ }
938+ }
939+
938940 data_reader_->set_read_communication_status (true );
939941 }
940942}
@@ -1174,10 +1176,7 @@ void DataReaderImpl::update_subscription_matched_status(
11741176
11751177 if (count_change < 0 )
11761178 {
1177- if (history_.writer_not_alive (status.remoteEndpointGuid ))
1178- {
1179- set_read_communication_status (true );
1180- }
1179+ history_.writer_not_alive (status.remoteEndpointGuid );
11811180 try_notify_read_conditions ();
11821181 }
11831182}
@@ -1492,10 +1491,7 @@ LivelinessChangedStatus& DataReaderImpl::update_liveliness_status(
14921491{
14931492 if (0 < status.not_alive_count_change )
14941493 {
1495- if (history_.writer_not_alive (iHandle2GUID (status.last_publication_handle )))
1496- {
1497- set_read_communication_status (true );
1498- }
1494+ history_.writer_not_alive (iHandle2GUID (status.last_publication_handle ));
14991495 try_notify_read_conditions ();
15001496 }
15011497
0 commit comments