5.25. OMG Specification Compliance
5.25.1. [Major] Incorrect value of an infinite duration in non-Java APIs *
In all language APIs other than Java, the value of an infinite duration
(e.g.,
dds::core::Duration::infinite()
in Modern C++) was not compliant with the OMG DDS Specification. The
incorrect value was sec = 0x7fffffff, nanosec = 0xffffffff. The
correct value is sec = 0x7fffffff, nanosec = 0x7fffffff. This
problem only affected releases 7.2.0 and above.
[RTI Issue ID CORE-15545]
5.25.2. [Major] Not possible to specify how to deserialize a sample with a discriminator that does not select a member or an unknown enum *
Previously, when the properties
dds.sample_assignability.accept_unknown_enum_value or
dds.sample_assignability.accept_unknown_union_discriminator were
used, they didn’t modify the behavior of the from_cdr_buffer APIs.
Now, instead of using these properties, you must set the behavior via
the Extensible Types compliance
mask,
which correctly modifies the behavior of the from_cdr_buffer APIs as
follows:
To enable what was previously the property
dds.sample_assignability.accept_unknown_enum_value, you would now set the bitNDDS_CONFIG_XTYPES_ACCEPT_UNKNOWN_ENUM_VALUE_BIT, whose value is0x00000010, in the Extensible Types compliance mask. When this bit is set, samples with an unknown enumerator will be accepted when deserializing or callingfrom_cdr_buffer.To enable what was previously the property
dds.sample_assignability.accept_unknown_union_discriminatordepends on the value you were assigning to it;from_cdr_bufferwill also be affected by the value of these bits:0 - Reject samples with an unknown discriminator: you don’t need to set any bits.
1 - Accept samples with an unknown discriminator and assign the default discriminator value: you need to set the bit NDDS_CONFIG_XTYPES_ACCEPT_UNKNOWN_DISCRIMINATOR_BIT, whose value is
0x00000020, to accept the sample, and set the bit NDDS_CONFIG_XTYPES_SELECT_DEFAULT_DISCRIMINATOR_BIT, whose value is0x00000040, to select the default discriminator value. If this bit is left unset and the NDDS_CONFIG_XTYPES_ACCEPT_UNKNOWN_DISCRIMINATOR_BIT bit is set, then the sample will be accepted and the unknown union discriminator value will be preserved.2 - Accept samples with an unknown discriminator: set the bit
NDDS_CONFIG_XTYPES_ACCEPT_UNKNOWN_DISCRIMINATOR_BIT, whose value is0x00000020, in the Extensible Types compliance mask.
With the new Extensible Types compliance mask (added in release 7.3.0),
the properties dds.sample_assignability.accept_unknown_enum_value
and dds.sample_assignability.accept_unknown_union_discriminator have
now been deprecated, which means they will be removed from a future
release.
Now that you can configure these deserialization aspects of the
from_cdr_buffer, the default behavior of the from_cdr_buffer
APIs has changed to reject samples with unknown union discriminators and
unknown enum values. If you want the previous behavior, see the
Migration
Guide.
[RTI Issue ID CORE-14532]
* This bug did not affect you if you are upgrading from 6.1.x or earlier.