2.2.1. RTI Connext Core Libraries

The following issues affect backward compatibility in the Core Libraries starting in release 7.6.0. Issues in the Core Libraries may affect components that use these libraries, including Infrastructure Services and Tools.

2.2.1.1. API Compatibility

2.2.1.1.1. Multiple attachments/detachments of same condition to WaitSet no longer allowed

The behavior of attaching a condition to a WaitSet has been updated to prevent multiple attachments of the same condition.

Previously, if the same condition was attached to a WaitSet multiple times, each attachment was accepted. As a result, the condition had to be detached the same number of times it was attached to be fully removed from the WaitSet.

Now, if the same condition is attached more than once, only the first attachment has an effect. Subsequent attachments are ignored. The condition is considered attached only once, and therefore only needs to be detached once to be fully removed.

If your application logic previously attached the same condition multiple times and detached it accordingly, you should update it to:

  • Attach each condition only once.

  • Detach each condition only once, regardless of how many times it was previously attached.

This change simplifies usage and ensures consistent behavior in the WaitSet.

2.2.1.2. Configuration Changes

2.2.1.2.1. max_samples_per_instance needs to be consistent with max_samples for unkeyed types

Release 7.6.0 fixed an issue (CORE-5643) with enforcing consistency between DDS_ResourceLimitsQosPolicy::max_samples_per_instance and DDS_ResourceLimitsQosPolicy::max_samples for unkeyed types. If you were setting max_samples_per_instance to a smaller value than max_samples for an unkeyed type, then Topic, DataWriter, or DataReader creation incorrectly succeeded. Now entity creation correctly fails if the values do not match, with an error message like this one:

ERROR DDS_ResourceLimitsQosPolicy_is_consistentI:INCONSISTENT QOS | For an unkeyed type, max_samples_per_instance (4) must equal max_samples (6) or DDS_LENGTH_UNLIMITED.

As the error message indicates, you need to change the value of max_samples_per_instance to either the value of max_samples or DDS_LENGTH_UNLIMITED.

2.2.1.2.2. Configure default discriminator value

In previous releases, union discriminators were initialized to the default case if there was a default case or to the lowest value associated with any member if the union didn’t have a default case. However, this behavior was not compliant with the OMG ‘Extensible and Dynamic Topic Types for DDS’ specification, version 1.3.

Starting in release 7.6.0, union discriminators are now initialized to the default value of their type, as mandated by the specification. For unions based on enums, the discriminator will be initialized to the first literal defined in the enum.

This change may result in a union being constructed with a discriminator value that does not select any member. This is expected behavior under the compliance rules, but can affect existing applications that rely on the old initialization behavior.

If you wish to restore the previous behavior, modify the Extensible Types compliance mask by unsetting the initialize_discriminator_to_default() bit (0x00000100 sets the bit, 0x00000000 unsets it; the bit is set by default, making it compatible with the specification). You also need to regenerate code with Code Generator, using the flag -xTypesComplianceMask with the same mask.

For example, to restore the previous behavior, you could set the mask in modern C++ like this:

using namespace rti::config::compliance;
set_xtypes_mask(
            get_xtypes_mask() & ~XTypesMask::initialize_discriminator_to_default());

Or in Python, like this:

import rti.connextdds.compliance as compliance
mask = compliance.XTypesMask.INITIALIZE_DISCRIMINATOR_TO_DEFAULT_BIT
compliance.set_xtypes_mask(
    compliance.get_xtypes_mask() & mask.flip())

For more information, see Extensible Types Compliance Mask in the RTI Connext Core Libraries Extensible Types Guide.

2.2.1.2.3. Configure compatibility between Python API and other APIs when using int8 type

Incompatibility between Python API and other APIs when using int8 type in release 7.5.0 can now be addressed through a configuration setting.

In 7.6.0, you can set the bit python_int8_730() bit(0x00000400) in the Extensible Types compliance mask to communicate with the Python API in previous releases (but not be compliant with the OMG ‘Extensible and Dynamic Topic Types for DDS’ specification, version 1.3), or leave it unset (the default setting) to be compliant with the specification (but not communicate with the Python API in previous releases).

For example, to communicate with the Python API in previous releases, you could set the Extensible Types compliance mask like this:

import rti.connextdds.compliance as compliance
compliance.set_xtypes_mask(
    compliance.get_xtypes_mask() | compliance.XTypesMask.PYTHON_INT8_730_BIT)

See Extensible Types Compliance Mask in the RTI Connext Core Libraries Extensible Types Guide for more information.

2.2.1.3. Logging Changes

2.2.1.3.1. Changes in RTI Connext logging behavior for Windows desktop applications

By default, Windows® desktop applications (i.e., Windows applications with a graphical user interface) do not have an associated console for displaying Connext log messages logged to the standard output. In previous releases, to avoid losing important messages, Connext automatically created a Windows console and redirected the output to it.

Now, as part of the fix for an issue (CORE-15707), this behavior has changed: Connext no longer creates Windows consoles for logging. The reason for this change is that, by default, attached Windows consoles terminate the associated process when the console is closed, which might affect the usability of the application.

To avoid losing important log messages in Windows desktop applications, install a logger device to capture and display the messages as desired. See Customizing the Handling of Generated Log Messages in the Connext Core Libraries User’s Manual for more information on how to install a logger device.