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