@@ -388,6 +388,28 @@ bool DataReaderImpl::wait_for_unread_message(
388
388
void DataReaderImpl::set_read_communication_status (
389
389
bool trigger_value)
390
390
{
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
+
391
413
StatusMask notify_status = StatusMask::data_on_readers ();
392
414
subscriber_->user_subscriber_ ->get_statuscondition ().get_impl ()->set_status (notify_status, trigger_value);
393
415
@@ -719,11 +741,6 @@ ReturnCode_t DataReaderImpl::read_or_take_next_sample(
719
741
return RETCODE_NOT_ENABLED;
720
742
}
721
743
722
- if (history_.getHistorySize () == 0 )
723
- {
724
- return RETCODE_NO_DATA;
725
- }
726
-
727
744
#if HAVE_STRICT_REALTIME
728
745
auto max_blocking_time = std::chrono::steady_clock::now () +
729
746
std::chrono::microseconds (::TimeConv::Time_t2MicroSecondsInt64 (qos_.reliability ().max_blocking_time ));
@@ -918,25 +935,6 @@ void DataReaderImpl::InnerDataReaderListener::on_data_available(
918
935
919
936
if (data_reader_->on_data_available (writer_guid, first_sequence, last_sequence))
920
937
{
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
-
940
938
data_reader_->set_read_communication_status (true );
941
939
}
942
940
}
@@ -1176,7 +1174,10 @@ void DataReaderImpl::update_subscription_matched_status(
1176
1174
1177
1175
if (count_change < 0 )
1178
1176
{
1179
- history_.writer_not_alive (status.remoteEndpointGuid );
1177
+ if (history_.writer_not_alive (status.remoteEndpointGuid ))
1178
+ {
1179
+ set_read_communication_status (true );
1180
+ }
1180
1181
try_notify_read_conditions ();
1181
1182
}
1182
1183
}
@@ -1491,7 +1492,10 @@ LivelinessChangedStatus& DataReaderImpl::update_liveliness_status(
1491
1492
{
1492
1493
if (0 < status.not_alive_count_change )
1493
1494
{
1494
- history_.writer_not_alive (iHandle2GUID (status.last_publication_handle ));
1495
+ if (history_.writer_not_alive (iHandle2GUID (status.last_publication_handle )))
1496
+ {
1497
+ set_read_communication_status (true );
1498
+ }
1495
1499
try_notify_read_conditions ();
1496
1500
}
1497
1501
0 commit comments