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]