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 bit NDDS_CONFIG_XTYPES_ACCEPT_UNKNOWN_ENUM_VALUE_BIT, whose value is 0x00000010, in the Extensible Types compliance mask. When this bit is set, samples with an unknown enumerator will be accepted when deserializing or calling from_cdr_buffer.

  • To enable what was previously the property dds.sample_assignability.accept_unknown_union_discriminator depends on the value you were assigning to it; from_cdr_buffer will 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 is 0x00000040, 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 is 0x00000020, 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.