What's New in 2.4.14.1 ====================== 2.4.14.1 is a cumulative bug fix release and does not include any new features. Important Interoperability Changes .................................. This release of |me| includes the following changes in API compatability with previous release: - *DDS_DomainParticipantFactory_get_instance* **must** be called before other APIs. This is required to ensure that a platform integration is properly configured and initialized before other APIs are called. APIs that need special attention have an additional attribute ``API Restriction`` to indicate any restrictions. .. only:: cert - *RELIABILITY.max_blocking_time* must be zero. - *disable_auto_interface_config* is not available in the the *UDP_InterfaceFactoryProperty* structure. What's Fixed in 2.4.14.1 ======================== .. MICRO-2289 Invalid samples in batched data did not count as 'lost samples' ............................................................... Invalid samples in batched data were not counted as lost samples, and did not trigger |me| to call *on_sample_lost()* when the "on_sample_lost" notification was enabled. This issue has been resolved. [RTI Issue ID MICRO-2289] Local variables in header file may have caused compiler warning ............................................................... Local variables were incorrectly defined in ReaderHistory.c and may have caused a compiler warning. This issue has been resolved. [RTI Issue ID MICRO-2785] .. MICRO-2794 Non-default timer resolutions may have caused an incorrect timeout .................................................................. Compiling |me| with a non-default timer resolution may have caused incorrect timeouts. This issue has been resolved. [RTI Issue ID MICRO-2794] .. MICRO-2830 Missing checks for *max_routes_per_reader* and *max_routes_per_writer* ...................................................................... The *DDS_DataReaderQos.reader_resource_limits.max_routes_per_writer* and *DDS_DataWriterQos.writer_resource_limits.max_routes_per_reader* were missing a check that the values were in the range [1,2000]. They were also missing from the methods *DDS_DataReaderQos_is_equal* and *DDS_DataWriterQos_is_equal* respectively. This issue has been resolved. [RTI Issue ID MICRO-2830, MICRO-2937] .. MICRO-3117 Missing NULL checks for *enabled_transports* ............................................ In previous releases, it was not checked that the *enabled_transports* QoS policy setting did not contain NULL pointers. This issue has been resolved. [RTI Issue ID MICRO-3117] .. MICRO-2866 Possible exception due to misaligned RTPS header ................................................ In previous releases, if multiple RTPS messages were received in the same UDP payload, a misaligned RTPS message header could cause an exception. .. note:: |rti_me| does not send multiple RTPS messages in the same UDP payload. This issue has been resolved. [RTI Issue ID MICRO-2866] .. MICRO-2897 *DDS_SubscriptionBuiltinTopicData_copy* did not copy the PresentationQosPolicy .............................................................................. The *DDS_SubscriptionBuiltinTopicData_copy* function did not copy the PresentationQosPolicy. This issue has been resolved. [RTI Issue ID MICRO-2897] .. MICRO-2904 Possible failure to start timer ............................... On architctures using the *posix* port of |me|, the DomainParticipantFactory may have failed to initialize if compiled to use signals or if CLOCK_MONOTONIC was not available. This issue has been resolved. [RTI Issue ID MICRO-2904] .. MICRO-2909 Sample timestamp now set to 0 if timestamp cannot be retrieved .............................................................. If the reception timestamp for a sample cannot be retrieved, the reception timestamp is set to 0. [RTI Issue ID MICRO-2909] .. MICRO-2913 *Qos_copy* functions did not validate input arguments ..................................................... In previous releases, the *Qos_copy* APIs did not validate that the input arguments were not NULL. This issue has been resolved. [RTI Issue ID MICRO-2913] .. MICRO-2915 Unused parameter *DOMAIN_PARTICIPANT_RESOURCE_LIMITS.matching_reader_writer_pair_allocation* removed .................................................................................................... The QoS policy setting *DOMAIN_PARTICIPANT_RESOURCE_LIMITS.matching_reader_writer_pair_allocation* was not used and has been removed from the *DOMAIN_PARTICIPANT_RESOURCE_LIMITS* structure. [RTI Issue ID MICRO-2915] .. MICRO-2929 *DDS_DomainParticpant_add_peer* may have returned success on failure .................................................................... *DDS_DomainParticpant_add_peer* may have returned success even if the peer was not added. This issue has been resolved. [RTI Issue ID MICRO-2929] .. MICRO-2964 *DDS_StringSeq_copy* did not validate input arguments ..................................................... In previous versions, *DDS_StringSeq_copy* did not check that the source and destination arguments were different before copying. This issue has been resolved. In addition, the documentation for *Seq_copy* has been updated to clearly state that overlapping memory regions are not supported, with the exception of copying to itself. [RTI Issue ID MICRO-2964] .. MICRO-2971 Memory leak in C++ classes for builtin topic data types and certain QoSes ......................................................................... SupportMethodsGen.hxx did not implement a destructor, which could have caused a memory leak when using the C++ API for builtin topic data types and certain QoSes. This problem has been fixed. [RTI Issue ID MICRO-2971] .. MICRO-2986 Possible NULL pointer exception in generated code if the system was out of memory ................................................................................. In previous releases, it was possible to get a NULL pointer exception in the generated code if the system was out of memory during initialization. This issue would have occurred during DDS entity creation, as memory is only allocated during entity creation. This issue has been resolved. [RTI Issue ID MICRO-2986] .. MICRO-3034 A DataWriter could run out of resources if sample was not added to cache ........................................................................ In rare cases, a *DataWriter* could run out of resources if a sample could be successfully serialized, but not added to the writer cache. This issue has been resolved. [RTI Issue ID MICRO-3034] .. MICRO-3042 Missing source code files ......................... In previous releases, the following source code files were missing: * UDPTransformations.c * UDPTransformations.h * DPSEVersion.c This problem has been fixed. [RTI Issue ID MICRO-3042] .. MICRO-3147 Possible serialization beyond stream buffer ........................................... In previous releases, *CDR_Stream_check_size* did not check for underflow. As a result, it was possible to serialize data beyond the buffer boundary if the buffer assigned to the stream was too small. This is only an issue for applications assigning too small of a buffer to a stream. This issue has been resolved. [RTI Issue ID MICRO 3147, MICRO-3200] .. MICRO-3148 *RELIABILITY.max_blocking_time* must be zero ............................................ In previous releases, a non-zero *RELIABILITY.max_blocking_time* was supported on a *DataReader*. This feature is not supported in this release. [RTI Issue ID MICRO-3148] .. MICRO-3151 Possible DataReader or DataWriter creation failure with multiple DomainParticipants ................................................................................... In previous releases, creating *DataReaders* or *DataWriters* in different threads for different *DomainParticipants* could fail due to a race condition. This issue has been resolved. [RTI Issue ID MICRO-3151] .. MICRO-3254 Incorrect *lease_duration* may have been used for a discovered participant .......................................................................... In previous releases, if the *lease_duration* was not sent by a remote *DomainParticipant*, a previously received value was used instead. This issue has been resolved. Note that RTI's DDS implementations send the *lease_duration*. [RTI Issue ID MICRO-3254] .. MICRO-3272 Missing consistency check for *DESTINATION_ORDER.source_timestamp_tolerance* ............................................................................ In previous releases, a check that *DESTINATION_ORDER.source_timestamp_tolerance* was normalized was missing (nanosecond < 1 seconds). This issue has been resolved. [RTI Issue ID MICRO-3272] .. MICRO-3276 Improved error detection for unresolved addresses ................................................. In previous releases, an unresolved address was ignored. In this release, if an address cannot be resolved, it results in a failure. This means that all addresses passed to the *add_peer* API and the *enabled_transports* QoS policy must be valid, otherwise entity creation will fail. [RTI Issue ID MICRO-3276] .. MICRO-3308 *DDS_StatusCondition_set_enabled_statuses* did not trigger if an active condition was enabled ............................................................................................. In previous releases, if a StatusCondition enabled by a call to *DDS_StatusCondition_set_enabled_statuses* was already active, the StatusCondition did not trigger. This issue has been resolved. [RTI Issue ID MICRO-3308] .. MICRO-3311 Race condition in DDS *enable* APIs ................................... In previouses releases, a race condition existed if the same DDS entity was enabled from multiple threads at the same time. This issue has been resolved. [RTI Issue ID MICRO-3311] .. only:: cert .. MICRO-3322 *disable_auto_interface_config* is not available in |me| ........................................................ In previous versions of |me|, *disable_auto_interface_config* was available in the *UDP_InterfaceFactoryProperty* structure, but was ignored (always TRUE). This variable is no longer available in |me|. [RTI Issue ID MICRO-3322] .. MICRO-3330 DDS WaitSet may have timed out later than timeout value ....................................................... In very rare cases, an error message taking a mutex may have been logged when using the POSIX real-time timers. This may have resulted in a delayed timeout for *DDS_WaitSets*. This issue has been resolved. [RTI Issue ID MICRO-3330] .. MICRO-4102 SYSTEM_RESOURCE_LIMITS.max_components QoS policy cannot be changed .................................................................. In previous releases, the documentation incorrectly specified that the ``SYSTEM_RESOURCE_LIMITS.max_components`` QoS policy could be changed. This has been corrected to state that it cannot be changed. The default value has also been increased to 64. [RTI Issue ID MICRO-4102] .. MICRO-4018 Incorrect heartbeat sent before first sample when first_write_sequence_number is not 1 ...................................................................................... In previous releases, if the ``DataWriterQos.protocol.rtps_reliable_writer.first_write_sequence_number`` was different from the default value of 1, heartbeats sent before the first sample was written would indicate 1 as the first sample available. This would cause a *DataReader* to wait for samples with a sequence number less than ``DataWriterQos.protocol.rtps_reliable_writer.first_write_sequence_number`` until a heartbeat with the correct first sequence number was received. This issue has been resolved. [RTI Issue ID MICRO-4081] .. MICRO-4062 Robustness check added to verify that participant GUIDs are unique within a DomainParticipantFactory .................................................................................................... A check has been added to ``DomainParticipantFactory_create_participant`` to validate that *DomainParticipants* created within the same ``DomainParticipantFactory`` have unique GUIDs, and return `nil` if this is not the case. [RTI Issue ID MICRO-4062] .. MICRO-3381 DDS_Entity_enable was not thread-safe for a DomainParticipant ............................................................. *DDS_Entity_enable* was not thread-safe, which may have led to race conditions. This issue has been resolved. [RTI Issue ID MICRO-3381] .. MICRO-3442 Missing input verification for API functions ............................................ The following functions did not have a precondition check: * *DDS_PublicationBuiltinTopicData_initialize()* * *DDS_SubscriptionBuiltinTopicData_initialize()* * *DDS_ParticipantBuiltinTopicData_initialize()* This issue has been resolved. [RTI Issue ID MICRO-3442] .. MICRO-3461 Incorrect return values from REDA_String ........................................ *REDA_String_compare* and *REDA_String_ncompare* would return incorrect values when NULL was passed in as one of the parameters. This issue has been resolved. [RTI Issue ID MICRO-3461] .. MICRO-3572 Incorrect return values from QoS APIs ..................................... The following functions have been corrected to return *DDS_RETCODE_BAD_PARAMETER* instead of *DDS_RETCODE_PRECONDITION_NOT_MET*: - *DDS_DomainParticipantFactoryQos_copy* - *DDS_DomainParticipantFactoryQos_initialize* - *DDS_DomainParticipantQos_copy* - *DDS_DomainParticipantQos_initialize* - *DDS_SubscriberQos_copy* - *DDS_SubscriberQos_initialize* - *DDS_DataReaderQos_copy* - *DDS_DataReaderQos_initialize* [RTI Issue ID MICRO-3572] .. MICRO-3529 DDS_Wstring_cmp did not match the implementation name DDS_Wstring_compare ......................................................................... The DDS Wstring compare function was incorrectly documented as being ``DDS_Wstring_cmp`` instead of ``DDS_Wstring_compare``. This issue has been resolved. [RTI Issue ID MICRO-3529] .. MICRO-3365 Race condition during participant discovery ........................................... A race condition existed during participant discovery. This issue has been resolved. [RTI Issue ID MICRO-3365] .. MICRO-4508 A DataWriter with BEST_EFFORT and TRANSIENT_LOCAL may run out of resources .......................................................................... A DataWriter with BEST_EFFORT and TRANSIENT_LOCAL QoS policies may run out of resources when ``DataWriterQos.resource_limits.max_samples_per_instance > 1``. .. note:: Resending of historical samples (``DataWriterQos.durability.kind = TRANSIENT_LOCAL``) requires a ``DataWriterQos.reliability.kind = RELIABLE`` Qos Policy. Thus, the combination of BEST_EFFORT and TRANSIENT_LOCAL is not useful, although it is a legal combination. [RTI Issue ID MICRO-4508] .. MICRO-4668 |me_h| may have repeated requesting a sample that was no longer available from a DataWriter ............................................................................................ If |me| detects a missing sample when using ``DDS_RELIABLE_RELIABILITY_QOS`` reliability, it will request the sample to be resent, but if the sample is no longer available from the DataWriter, the DataWriter may send a GAP message to indicate the sample is not longer available. |me| failed to interpret the GAP message correctly if the first sequence number in the GAP message was equal to the bitmap base of the GAP message. In this case, |me| failed to ignore the no-longer-available sample and kept sending a request for the sample. This problem has been fixed. [RTI Issue ID MICRO-4668] .. MICRO-4569 DDS_Subscriber_lookup_datareader may return a DataReader that was created by a different Subscriber ................................................................................................... The ``DDS_Subscriber_lookup_datareader`` API searches for a DataReader for a given TopicDescription created by the Subscriber. However, in previous releases, the returned DataReader could belong to a different Subscriber if multiple DataReaders were created for the same Topic in different Subscribers. This problem has been fixed. [RTI Issue ID MICRO-4569] .. MICRO-4570 DDS_Publisher_lookup_datawriter may return a DataWriter that was created by a different Publisher ................................................................................................. The ``DDS_Publisher_lookup_datawriter`` API searches for a DataWriter for a given Topic created by the Publisher. However, in previous releases, the returned DataWriter could belong to a different Publisher if multiple DataWriters were created for the same Topic in different Publishers. This problem has been fixed. [RTI Issue ID MICRO-4570] .. MICRO-5183 A reliable DataWriter may ignore requests to resend samples ........................................................... If a DataWriter has received multiple requests to resend samples before its periodic heartbeat period expires, the DataWriter may ignore the request if the requested sample has been sent and is also the first expected sample by the requesting DataReader. This problem has been fixed. [RTI Issue ID MICRO-5183] .. MICRO-5340 Compiler warning due to reliance on deprecated implicit copy constructor for C++ ................................................................................ In previous releases, compiling with C++ could produce the following warning: .. code-block:: none warning: definition of implicit copy constructor This issue has been fixed. This release adds copy constructors for C++ classes where the use of implicit implicit copy constructors have been deprecated. [RTI Issue ID MICRO-5340] .. MICRO-5387 RTPS message may have been rejected ................................... An RTPS message may have been rejected if it had a HDR_EXT and the last RTPS submessage had a length that is not a multiple of 4. This issue has been fixed. [RTI Issue ID MICRO-5387] .. MICRO-5412 Warning about hostname not supported in posixSystem.c ..................................................... Compiling posixSystem.c could produce the following warning: .. code-block:: none warning: RTI Micro does not support retrieving the hostname for CERT. Set hostname manually [-Wcpp] This warning was unnecessary and has been removed. [RTI Issue ID MICRO-5412] .. MICRO-5428 False positive compiler warning ............................... Compiling with GCC 11 could produce the following warning: .. code-block:: none warning: ‘presentation’ may be used uninitialized [-Wmaybe-uninitialized] This was a false positive since ``presentation`` was deserialized. This problem has been fixed. [RTI Issue ID MICRO-5428]