4.10. APIs (Modern C++ API)

4.10.1. [Critical] Implicit destruction of Modern C++ entities inside their Listeners

Some Modern C++ entities were being implicitly destroyed when they went out of scope within their Listeners, which is not permitted. Now, entities should no longer be unintentionally destroyed while their Listener is executing.

[RTI Issue ID CORE-15869]

4.10.2. [Major] Excessive memory allocation in rti::core::xtypes::convert function

The rti::core::xtypes::convert function allocated all bounded strings and sequence members in the returned object to their maximum size, even if the size of these members was far smaller than the maximum. Now, they are only allocated to the exact size that is required based on the input DynamicData object.

For example, consider the following IDL:

struct StructWithBigSequence {
    sequence<long, 2147483646> bigSequence;
};

When using the rti::core::xtypes::convert function to convert a DynamicData sample to a StructWithBigSequence, the convert function incorrectly allocated 2147483646 elements, even if the number of elements in the DynamicData sample was far fewer than that number. Now, the convert function only allocates the number of elements that are actually in the DynamicData sample.

[RTI Issue ID CORE-16310]

4.10.3. [Major] find_datawriters/readers APIs didn’t work with XML-Based Application Creation

Previously, when a DomainParticipant was created from XML (create_participant_from_config()), its DataReaders and DataWriters had to be looked up with their explicit template type T. For that reason, methods such as find_datareaders and find_datawriters,* which returned AnyDataReader and AnyDataWriter, would fail. This issue has been resolved, and now it is possible to look up the type-erased AnyDataReader and AnyDataWriter objects.

However, the AnyDataReader and AnyDataWriter entities created in this scenario now have specific constraints. The following operations are not allowed on these entities until a typed DataReader<T>/DataWriter<T> has been constructed by calling AnyDataReader.get<T>()/AnyDataWriter.get<T>() at least once:

  • Extension methods, via the operator ->.

  • The close() method.

  • The retain() method.

AnyDataReader and AnyDataWriter entities created from a DomainParticipant that was not created using RTI Connext XML-Based Application Creation are not affected by these changes.

[RTI Issue ID CORE-8879]

4.10.4. [Minor] Incorrect implementation of BuiltinTopicReaderResourceLimits default constructor

The default constructor of BuiltinTopicReaderResourceLimits incorrectly set all of the fields to 0 or false. This problem did not affect the default constructor of the class that contains BuiltinTopicReaderResourceLimits, which is DiscoveryConfig. It only affected the construction of a BuiltinTopicReaderResourceLimits in isolation.

[RTI Issue ID CORE-16392]

4.10.5. [Minor] Missing Modern C++ Distributed Logger import library on Windows

In earlier versions of Connext for Windows (Connext 7.2.0 and later), the runtime library of Distributed Logger in Modern C++ (rtidlcpp2.dll) was shipped without its corresponding import library (rtidlcpp2.lib).

[RTI Issue ID DISTLOG-263]