@@ -390,6 +390,28 @@ bool DataReaderImpl::wait_for_unread_message(
390
390
void DataReaderImpl::set_read_communication_status (
391
391
bool trigger_value)
392
392
{
393
+ if (trigger_value)
394
+ {
395
+ auto user_reader = user_datareader_;
396
+
397
+ // First check if we can handle with on_data_on_readers
398
+ SubscriberListener* subscriber_listener =
399
+ subscriber_->get_listener_for (StatusMask::data_on_readers ());
400
+ if (subscriber_listener != nullptr )
401
+ {
402
+ subscriber_listener->on_data_on_readers (subscriber_->user_subscriber_ );
403
+ }
404
+ else
405
+ {
406
+ // If not, try with on_data_available
407
+ DataReaderListener* listener = get_listener_for (StatusMask::data_available ());
408
+ if (listener != nullptr )
409
+ {
410
+ listener->on_data_available (user_reader);
411
+ }
412
+ }
413
+ }
414
+
393
415
StatusMask notify_status = StatusMask::data_on_readers ();
394
416
subscriber_->user_subscriber_ ->get_statuscondition ().get_impl ()->set_status (notify_status, trigger_value);
395
417
@@ -721,11 +743,6 @@ ReturnCode_t DataReaderImpl::read_or_take_next_sample(
721
743
return RETCODE_NOT_ENABLED;
722
744
}
723
745
724
- if (history_.getHistorySize () == 0 )
725
- {
726
- return RETCODE_NO_DATA;
727
- }
728
-
729
746
#if HAVE_STRICT_REALTIME
730
747
auto max_blocking_time = std::chrono::steady_clock::now () +
731
748
std::chrono::microseconds (::TimeConv::Time_t2MicroSecondsInt64 (qos_.reliability ().max_blocking_time ));
@@ -920,25 +937,6 @@ void DataReaderImpl::InnerDataReaderListener::on_data_available(
920
937
921
938
if (data_reader_->on_data_available (writer_guid, first_sequence, last_sequence))
922
939
{
923
- auto user_reader = data_reader_->user_datareader_ ;
924
-
925
- // First check if we can handle with on_data_on_readers
926
- SubscriberListener* subscriber_listener =
927
- data_reader_->subscriber_ ->get_listener_for (StatusMask::data_on_readers ());
928
- if (subscriber_listener != nullptr )
929
- {
930
- subscriber_listener->on_data_on_readers (data_reader_->subscriber_ ->user_subscriber_ );
931
- }
932
- else
933
- {
934
- // If not, try with on_data_available
935
- DataReaderListener* listener = data_reader_->get_listener_for (StatusMask::data_available ());
936
- if (listener != nullptr )
937
- {
938
- listener->on_data_available (user_reader);
939
- }
940
- }
941
-
942
940
data_reader_->set_read_communication_status (true );
943
941
}
944
942
}
@@ -1178,7 +1176,10 @@ void DataReaderImpl::update_subscription_matched_status(
1178
1176
1179
1177
if (count_change < 0 )
1180
1178
{
1181
- history_.writer_not_alive (status.remoteEndpointGuid );
1179
+ if (history_.writer_not_alive (status.remoteEndpointGuid ))
1180
+ {
1181
+ set_read_communication_status (true );
1182
+ }
1182
1183
try_notify_read_conditions ();
1183
1184
}
1184
1185
}
@@ -1493,7 +1494,10 @@ LivelinessChangedStatus& DataReaderImpl::update_liveliness_status(
1493
1494
{
1494
1495
if (0 < status.not_alive_count_change )
1495
1496
{
1496
- history_.writer_not_alive (iHandle2GUID (status.last_publication_handle ));
1497
+ if (history_.writer_not_alive (iHandle2GUID (status.last_publication_handle )))
1498
+ {
1499
+ set_read_communication_status (true );
1500
+ }
1497
1501
try_notify_read_conditions ();
1498
1502
}
1499
1503
0 commit comments