Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 1386fd6

Browse files
authored
Take and return new RMW_DURATION_INFINITE correctly (#491)
* Take and return new RMW_DURATION_INFINITE correctly Signed-off-by: Emerson Knapp <[email protected]>
1 parent cc0476f commit 1386fd6

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

rmw_connext_shared_cpp/src/qos.cpp

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,17 @@ namespace
2626
{
2727

2828
bool
29-
is_time_default(const rmw_time_t & time)
29+
is_time_unspecified(const rmw_time_t & time)
3030
{
31-
return time.sec == 0 && time.nsec == 0;
31+
return rmw_time_equal(time, RMW_DURATION_UNSPECIFIED);
3232
}
3333

3434
DDS_Duration_t
3535
rmw_time_to_dds(const rmw_time_t & time)
3636
{
37+
if (rmw_time_equal(time, RMW_DURATION_INFINITE)) {
38+
return DDS_DURATION_INFINITE;
39+
}
3740
DDS_Duration_t duration;
3841
duration.sec = static_cast<DDS_Long>(time.sec);
3942
duration.nanosec = static_cast<DDS_UnsignedLong>(time.nsec);
@@ -98,7 +101,7 @@ set_entity_qos_from_profile_generic(
98101

99102
// DDS_DeadlineQosPolicy has default value of DDS_DURATION_INFINITE
100103
// don't overwrite if default passed
101-
if (!is_time_default(qos_profile.deadline)) {
104+
if (!is_time_unspecified(qos_profile.deadline)) {
102105
entity_qos.deadline.period = rmw_time_to_dds(qos_profile.deadline);
103106
}
104107

@@ -116,7 +119,7 @@ set_entity_qos_from_profile_generic(
116119
RMW_SET_ERROR_MSG("Unknown QoS liveliness policy");
117120
return false;
118121
}
119-
if (!is_time_default(qos_profile.liveliness_lease_duration)) {
122+
if (!is_time_unspecified(qos_profile.liveliness_lease_duration)) {
120123
entity_qos.liveliness.lease_duration = rmw_time_to_dds(qos_profile.liveliness_lease_duration);
121124
}
122125

@@ -151,7 +154,7 @@ set_entity_qos_from_profile(
151154
DDS::DataWriterQos & entity_qos)
152155
{
153156
// Set any QoS settings that are specific to DataWriter, then call the shared version
154-
if (!is_time_default(qos_profile.lifespan)) {
157+
if (!is_time_unspecified(qos_profile.lifespan)) {
155158
entity_qos.lifespan.duration = rmw_time_to_dds(qos_profile.lifespan);
156159
}
157160
return set_entity_qos_from_profile_generic(qos_profile, entity_qos);
@@ -327,8 +330,7 @@ dds_qos_lifespan_to_rmw_qos_lifespan(
327330
const AttributeT & dds_qos,
328331
rmw_qos_profile_t * qos)
329332
{
330-
qos->lifespan.sec = dds_qos.lifespan.duration.sec;
331-
qos->lifespan.nsec = dds_qos.lifespan.duration.nanosec;
333+
qos->lifespan = dds_duration_to_rmw(dds_qos.lifespan.duration);
332334
}
333335

334336
template<>
@@ -381,6 +383,16 @@ void dds_qos_to_rmw_qos<DDS::DataReaderQos>(
381383
const DDS::DataReaderQos & dds_qos,
382384
rmw_qos_profile_t * qos);
383385

386+
rmw_time_t
387+
dds_duration_to_rmw(DDS_Duration_t duration)
388+
{
389+
if (DDS_Duration_is_infinite(&duration)) {
390+
return RMW_DURATION_INFINITE;
391+
}
392+
rmw_time_t result = {(uint64_t)duration.sec, duration.nanosec};
393+
return result;
394+
}
395+
384396
template<typename AttributeT>
385397
void
386398
dds_remote_qos_to_rmw_qos(
@@ -414,8 +426,7 @@ dds_remote_qos_to_rmw_qos(
414426
break;
415427
}
416428

417-
qos->deadline.sec = dds_qos.deadline.period.sec;
418-
qos->deadline.nsec = dds_qos.deadline.period.nanosec;
429+
qos->deadline = dds_duration_to_rmw(dds_qos.deadline.period);
419430

420431
dds_qos_lifespan_to_rmw_qos_lifespan(dds_qos, qos);
421432

@@ -430,8 +441,7 @@ dds_remote_qos_to_rmw_qos(
430441
qos->liveliness = RMW_QOS_POLICY_LIVELINESS_UNKNOWN;
431442
break;
432443
}
433-
qos->liveliness_lease_duration.sec = dds_qos.liveliness.lease_duration.sec;
434-
qos->liveliness_lease_duration.nsec = dds_qos.liveliness.lease_duration.nanosec;
444+
qos->liveliness_lease_duration = dds_duration_to_rmw(dds_qos.liveliness.lease_duration);
435445
}
436446

437447
template

0 commit comments

Comments
 (0)