10.3. What’s Fixed in 2.4.15¶
The following are fixes since Connext Cert 2.4.12.1.
[Critical]: System-stopping issue, such as a crash or data loss.
[Major]: Significant issue with no easy workaround.
[Minor]: Issue that usually has a workaround.
[Trivial]: Small issue, such as a typo in a log.
10.3.1. [Critical] Failed to deliver samples when prior samples were lost¶
Connext Cert would sometimes fail to deliver samples to a
DataReader if the last processed sample was a HEARTBEAT
message that
indicated lost samples.
[RTI Issue ID MICRO-7317]
10.3.2. [Critical] messageLength field was required in RTPS HEADER_EXTENSION for checksum calculations¶
Previously, Connext Cert required that the messageLength
field be
present in the RTPS HEADER_EXTENSION
if a checksum was also included in
the HEADER_EXTENSION
. If the messageLength
was not present, it was
considered an error and the RTPS message was discarded.
Now, the messageLength
field is optional. If it is not included, the
messageLength
will be assumed to be the size of the message payload.
Connext Cert and Connext Professional always include the
messageLength
in the HEADER_EXTENSION
when a checksum is being sent.
This fix will resolve compatibility when using checksums with other DDS
implementations.
[RTI Issue ID MICRO-7172]
10.3.3. [Critical] DataReader on a Topic using an appendable type may have received samples with incorrect value¶
A DataReader subscribing to a Topic on an appendable type may have received incorrect samples from a matching DataWriter.
The problem only occurred when the DataWriter published a type with fewer members than the DataReader type. For example, consider a DataWriter on FooBase and a DataReader on FooDerived:
@appendable struct FooBase {
sequence<uint8,1024>base_value;
};
@appendable struct FooDerived {
sequence<uint8,1024> base_value;
@default(12) uint8 derived_value;
};
In this case, the serialized sample stream would be padded with extra
bytes to align the stream to 4 bytes as required by the OMG ‘Extensible
and Dynamic Topic Types for DDS’ specification, version
1.3. However, the
additional padding bytes were incorrectly interpreted as part of the
data and derived_value
may have been set to a random value.
For example, in the case above when the DataWriter published a sample
with type FooBase
, in some cases the DataReader received a sample
in which the field derived_value
was set to 0 instead of 12.
Note
Connext Cert does not support the @default
annotation.
[RTI Issue ID MICRO-6402]
10.3.4. [Critical] Failure to interoperate with other DDS implementations if default multicast locator was specified¶
Connext Cert did not interoperate with other DDS implementations when the default multicast locator was specified.
[RTI Issue ID MICRO-5148]
10.3.5. [Critical] Connext Cert may have repeated requesting a sample that was no longer available from a DataWriter¶
If Connext Cert detects a missing sample when using DDS_RELIABLE_RELIABILITY_QOS reliability, it will request the sample to be resent, but if the sample is no longer available from the DataWriter, the DataWriter may send a GAP message to indicate the sample is not longer available.
Connext Cert failed to interpret the GAP message correctly if the first sequence number in the GAP message was equal to the bitmap base of the GAP message. In this case, Connext Cert failed to ignore the no-longer-available sample and kept sending a request for the sample.
[RTI Issue ID MICRO-4668]
10.3.6. [Critical] DataWriter with BEST_EFFORT and TRANSIENT_LOCAL may have run out of resources¶
A DataWriter with BEST_EFFORT
and TRANSIENT_LOCAL
QoS policies may run
out of resources when
DataWriterQos.resource_limits.max_samples_per_instance
> 1.
Note
Resending of historical samples (DataWriterQos.durability.kind
= TRANSIENT_LOCAL
) requires a DataWriterQos.reliability.kind
= RELIABLE
QoS policy. Thus, the combination of BEST_EFFORT
and TRANSIENT_LOCAL
is
not useful, although it is a legal combination.
[RTI Issue ID MICRO-4508]
10.3.7. [Major] Code generation did not create proper type support for IDL files containing multiple Zero Copy types¶
This issue only affected version 2.4.15 ZC ER-2.
IDL files containing multiple types with the @transfer_mode(SHMEM_REF)
annotation would only generate type support functions for the first type in the
file.
[RTI Issue ID MICRO-8461]
10.3.8. [Major] Samples with meta-information were not delivered to the user if they arrived when history cache was full¶
When a DataReader’s history cache was full, samples containing meta-information from matched DataWriters were not delivered to the user.
[RTI Issue ID MICRO-8063]
10.3.9. [Major] Possible segmentation fault when a Zero Copy-enabled DataReader called read() after unmatching with a DataWriter¶
This issue only affected version 2.4.15 ZC ER-2.
If a Zero Copy-enabled DataReader attempted to retrieve any samples it
previously received from an unmatched DataReader by calling
read()
, a segmentation fault could occur.
[RTI Issue ID MICRO-7880]
10.3.10. [Major] Incorrect deserialization of CDR encapsulation padding bits¶
The padding bytes in a sample were deserialized incorrectly. This resulted in samples being dropped if the number of padding bytes in a sample was greater than zero.
[RTI Issue ID MICRO-6799]
10.3.11. [Major] Heap memory was allocated by the Zero Copy v2 transport during DDS discovery¶
This issue only affected version 2.4.15 ZC ER-2.
The Zero Copy v2 transport performed heap memory allocations at runtime, specifically at the time DDS discovery occurred. This was out of compliance with CERT criteria.
Now, all heap memory required by the Zero Copy v2 transport is allocated at initialization time (the point when all DDS objects are created by user code), and no further allocations are performed.
[RTI Issue ID MICRO-5813]
10.3.12. [Minor] Incorrect heartbeat sent before first sample when first_write_sequence_number is not 1¶
If the DataWriterQos.protocol.rtps_reliable_writer.first_write_sequence_number
was different from the default value 1, heartbeats sent before the first
sample was written would indicate 1 as the first sample available. This
caused DataReaders to wait for samples with a sequence number less than
DataWriterQos.protocol.rtps_reliable_writer.first_write_sequence_number
until a heartbeat with the correct first sequence number was received.
[RTI Issue ID MICRO-4081]
10.3.14. [Trivial] DDS_Wstring_cmp did not match the implementation name DDS_Wstring_compare¶
The DDS Wstring compare function was incorrectly documented as being
DDS_Wstring_cmp
instead of DDS_Wstring_compare
.
[RTI Issue ID MICRO-3529]