@@ -387,6 +387,28 @@ bool DataReaderImpl::wait_for_unread_message(
387
387
void DataReaderImpl::set_read_communication_status (
388
388
bool trigger_value)
389
389
{
390
+ if (trigger_value)
391
+ {
392
+ auto user_reader = user_datareader_;
393
+
394
+ // First check if we can handle with on_data_on_readers
395
+ SubscriberListener* subscriber_listener =
396
+ subscriber_->get_listener_for (StatusMask::data_on_readers ());
397
+ if (subscriber_listener != nullptr )
398
+ {
399
+ subscriber_listener->on_data_on_readers (subscriber_->user_subscriber_ );
400
+ }
401
+ else
402
+ {
403
+ // If not, try with on_data_available
404
+ DataReaderListener* listener = get_listener_for (StatusMask::data_available ());
405
+ if (listener != nullptr )
406
+ {
407
+ listener->on_data_available (user_reader);
408
+ }
409
+ }
410
+ }
411
+
390
412
StatusMask notify_status = StatusMask::data_on_readers ();
391
413
subscriber_->user_subscriber_ ->get_statuscondition ().get_impl ()->set_status (notify_status, trigger_value);
392
414
@@ -718,11 +740,6 @@ ReturnCode_t DataReaderImpl::read_or_take_next_sample(
718
740
return ReturnCode_t::RETCODE_NOT_ENABLED;
719
741
}
720
742
721
- if (history_.getHistorySize () == 0 )
722
- {
723
- return ReturnCode_t::RETCODE_NO_DATA;
724
- }
725
-
726
743
#if HAVE_STRICT_REALTIME
727
744
auto max_blocking_time = std::chrono::steady_clock::now () +
728
745
std::chrono::microseconds (::TimeConv::Time_t2MicroSecondsInt64 (qos_.reliability ().max_blocking_time ));
@@ -917,25 +934,6 @@ void DataReaderImpl::InnerDataReaderListener::on_data_available(
917
934
918
935
if (data_reader_->on_data_available (writer_guid, first_sequence, last_sequence))
919
936
{
920
- auto user_reader = data_reader_->user_datareader_ ;
921
-
922
- // First check if we can handle with on_data_on_readers
923
- SubscriberListener* subscriber_listener =
924
- data_reader_->subscriber_ ->get_listener_for (StatusMask::data_on_readers ());
925
- if (subscriber_listener != nullptr )
926
- {
927
- subscriber_listener->on_data_on_readers (data_reader_->subscriber_ ->user_subscriber_ );
928
- }
929
- else
930
- {
931
- // If not, try with on_data_available
932
- DataReaderListener* listener = data_reader_->get_listener_for (StatusMask::data_available ());
933
- if (listener != nullptr )
934
- {
935
- listener->on_data_available (user_reader);
936
- }
937
- }
938
-
939
937
data_reader_->set_read_communication_status (true );
940
938
}
941
939
}
@@ -1175,7 +1173,10 @@ void DataReaderImpl::update_subscription_matched_status(
1175
1173
1176
1174
if (count_change < 0 )
1177
1175
{
1178
- history_.writer_not_alive (iHandle2GUID (status.last_publication_handle ));
1176
+ if (history_.writer_not_alive (iHandle2GUID (status.last_publication_handle )))
1177
+ {
1178
+ set_read_communication_status (true );
1179
+ }
1179
1180
try_notify_read_conditions ();
1180
1181
}
1181
1182
}
@@ -1463,7 +1464,10 @@ LivelinessChangedStatus& DataReaderImpl::update_liveliness_status(
1463
1464
{
1464
1465
if (0 < status.not_alive_count_change )
1465
1466
{
1466
- history_.writer_not_alive (iHandle2GUID (status.last_publication_handle ));
1467
+ if (history_.writer_not_alive (iHandle2GUID (status.last_publication_handle )))
1468
+ {
1469
+ set_read_communication_status (true );
1470
+ }
1467
1471
try_notify_read_conditions ();
1468
1472
}
1469
1473
0 commit comments