6.4.8. Fixes Related to APIs
6.4.8.1. [Minor] DynamicData method to get member type missing in Modern C++ and C# APIs
The method to retrieve a member type from a DynamicData object was not provided in the Modern C++ and C# APIs. The following methods have now been added:
C++: DynamicData::member_type(const std::string& name) and member_type(uint32_t id)
C#: DynamicData.GetMemberType(string name) and GetMemberType(int id)
[RTI Issue ID CORE-13371]
6.4.8.2. Fixes Related to Modern C++ API
6.4.8.2.1. [Major] banish and subject_name APIs were unresolved in Modern C++ Windows dynamic libraries *
The Modern C++ APIs banish_ignored_participants, discovered_participant_subject_name, and discovered_participants_from_subject_name were unresolved symbols in the nddscpp2 Windows dynamic libraries. If you attempted to use them, you would get LNK2019 unresolved external symbol errors. This problem has been fixed.
[RTI Issue ID CORE-13053]
6.4.8.2.2. [Major] Unnecessary small memory allocation in some operations, including read/take
Every call to a DataReader read/take operation caused an unnecessary small memory allocation that was immediately released. More generally, initializing a reference type to dds::core::null caused the same allocation. For example:
DomainParticipant p = dds::core::null;
This unnecessary allocation has been removed. Constructing a reference type to dds::core::null no longer allocates memory.
[RTI Issue ID CORE-13262]
6.4.8.2.3. [Major] close() operation of a ContentFilteredTopic created from XML didn’t work
The close() operation of a ContentFilteredTopic created from XML didn’t actually close it. However, when its DomainParticipant was closed or destroyed, the ContentFilteredTopic was correctly closed. This problem has been resolved.
[RTI Issue ID CORE-13367]
6.4.8.3. Fixes Related to C# API
6.4.8.3.1. [Critical] Exception when disposing a DomainParticipant or when entities were not properly disposed
In previous releases of the .NET API, an exception may have occurred when disposing a DomainParticipant or whenever unused entities that had not been properly disposed were garbage-collected.
[RTI Issue ID CORE-13231]
6.4.8.3.2. [Major] Windows library dependency missing from .NET API NuGet packages *
In release 7.0.0, Windows machines that did not have the Visual Studio redistributable may not have been able to run DDS .NET applications out of the box. This dependency is now managed internally and no longer required by the user.
[RTI Issue ID CORE-13120]
6.4.8.4. Fixes Related to Java API
6.4.8.4.1. [Critical] Java API leaked some objects in certain DomainParticipantFactory operations
The Java API created and pinned a number of objects as a result of calling most methods in the DomainParticipantFactory, including the creation of DomainParticipants. While these objects did not consume significant amounts of memory, certain JVMs could have exhausted the maximum number of allowed global references, causing applications to fail. This problem has been resolved.
[RTI Issue ID CORE-12838]
6.4.8.4.2. [Major] get_typecode method of a DomainParticipant in Java API failed when the type contained a wstring element
In the Java API, calling the get_typecode method on a DomainParticipant for a registered type that contained a wstring element failed with the following exception:
Exception in thread "main" com.rti.dds.infrastructure.BAD_TYPECODE: Error creating type code
Exception in thread "main" com.rti.dds.infrastructure.BAD_TYPECODE: Error creating type code
at com.rti.dds.typecode.TypeCodeFactory.create_tc_from_native(TypeCodeFactory.java:984)
Exception in thread "main" com.rti.dds.infrastructure.BAD_TYPECODE: Error creating type code
at com.rti.dds.typecode.TypeCodeFactory.create_tc_from_native(TypeCodeFactory.java:984)
at com.rti.dds.domain.DomainParticipantImpl.get_typecode(DomainParticipantImpl.java:2027)
The exception was caused by a problem in the way the Connext Java API interfaced with its internal C implementation. This problem has been resolved.
[RTI Issue ID CORE-13302]
6.4.8.5. Fixes Related to Python API
6.4.8.5.1. [Critical] Possible deadlock between creation of a dds.Topic and a listener callback
A possible deadlock could have occurred, leaving the Python interpreter hanging indefinitely when a dds.Topic was created at the same time as a listener callback was in process. This problem has been resolved.
[RTI Issue ID PY-88]
6.4.8.5.2. [Major] DynamicData accessor for an enum member in a base type failed (Python API)
Given a DynamicData for a struct type (my_struct) with a base type containing an enum member (my_enum), the following code failed:
sample = dds.DynamicData(my_struct)
sample = dds.DynamicData(my_struct)
print(sample["my_enum"]) # error: member my_enum doesn't exist
This problem has been resolved.
[RTI Issue ID PY-30]
6.4.8.5.3. [Major] Possible incorrect default values when receiving extensible data
Given the following situation:
An application uses a dds.DataReader for an extensible IDL type “T1” containing a non-optional primitive member “a”.
The reader receives data for a different-but-compatible type “T2” that doesn’t define “a”.
The reader is expected to return a data sample where “a” is set to its default value (normally 0). However, in some situations the data sample may have contained an unexpected value for “a”. This problem has been resolved.
[RTI Issue ID PY-77]
6.4.8.5.4. [Major] Some APIs where missing, incorrectly named, or have been deleted
6.4.8.5.4.1. Removed types, methods, and fields:
TopicInstance and all related operations in the DataReader and DataWriter have been removed.
The static properties dds.WriterDataLifecycle.auto_dispose_unregistered_instances and dds.WriterdataLifecycle.manually_dispose_unregistered_instances have been removed due to being too similar to the non-static properties.
The DataReader operations read_next and take_next have been removed.
6.4.8.5.4.2. Renamed types, methods and fields:
dds.ReaderDataLifecycle.autopurge_unregistered_instances_delay was incorrectly named and has been renamed to autopurge_nowriter_samples_delay; autopurge_nowriter_instances_delay was missing and has been added.
dds.Filter.sql_filter_name has been renamed to dds.Filter.SQL_FILTER_NAME; dds.Filter.stringmatch_filter_name has been renamed to dds.Filter.STRINGMATCH_FILTER_NAME. The same constants have been renamed in dds.MultiChannel.
dds.DataWriterResourceLimitsInstaceReplacementKind was misspelled and has been renamed to dds.DataWriterResourceLimitsInstanceReplacementKind.
dds.TransportMulticast.settings has been renamed to dds.TransportMulticast.value; dds.TransportMulticastMapping.settings has been renamed to dds.TransportMulticastMapping.value; dds.TransportSelection.enabled_transports has been renamed to dds.TransportSelection.value; dds.TransportUnicast.settings has been renamed to dds.TransportUnicast.value.
6.4.8.5.4.3. Newly added missing types, methods, and fields:
The DataReader operation acknowledge_sample with ack_response_data was missing and has been added.
dds.Presentation.drop_incomplete_coherent_set was missing and has been added.
dds.DomainParticipant - the following methods have been added: discovered_participant_subject_name, discovered_participants_from_subject_name, banish_ignored_participants.
dds.DomainParticipantQos - the following QoS policies have been added: partition, default_unicast.
dds.BuiltinTopicReaderResourceLimits was missing max_fragmented_samples_per_remote_writer, which has now been added.
The constant dds.DataReaderResourceLimits.AUTO_MAX_TOTAL_INSTANCES was missing and has been added.
dds.DataWriterProtocol.initial_virtual_sequence_number was missing and has been added.
dds.DiscoveryConfigBuiltinChannelKindMask was missing and has been added.
dds.DomainParticipantResourceLimits.serialized_type_object_dynamic_allocation_threshold was missing and has been added.
The constant dds.PublishMode.PUBLICATION_PRIORITY_UNDEFINED was missing and has been added.
dds.SystemResourceLimits.initial_objects_per_thread was missing and has been added.
dds.DataWriterCacheStatus was missing the following read-only properties, which have been added: alive_instance_count, alive_instance_count_peak, disposed_instance_count, disposed_instance_count_peak, unregistered_instance_count, unregistered_instance_count_peak.
dds.CompressionSettings was missing the following constants, which have been added: COMPRESSION_LEVEL_DEFAULT, COMPRESSION_LEVEL_BEST_SPEED, COMPRESSION_LEVEL_BEST_COMPRESSION.
dds.Cookie was missing a no-argument constructor, which has been added.
dds.AcknowledgmentInfo.cookie was missing and has been added.
The constant dds.FlowControllerProperty.DEFAULT_FLOW_CONTROLLER_NAME was missing and has been added.
dds.Property can now be created from a dictionary.
6.4.8.5.4.4. Other
In Entity types, listener is now a read-only property; use set_listener to change it with a status mask.
The DataReader read/take operations include several changes. See RTI Connext Core Libraries What’s New.
dds.GroupData’s constructor did not initialize the bytes correctly and has been fixed.
Setting dds.EntityName.name and role_name to None explicitly was not supported and caused a crash. This has been fixed.
[RTI Issue ID PY-85]
6.4.8.5.5. [Major] Listeners may not have been called in some situations
Entity listener callbacks may not have been called in some situations, causing the application to miss notifications about Entity status changes. This problem was due to a bug in pybind11 version 2.8.1. The build instructions have been updated to require pybind11 2.9.0, which solves this problem.
[RTI Issue ID PY-92]
* This bug does not affect you if you are upgrading from 6.1.x or earlier.