6.6.1. Fixes Related to Callbacks and Waitsets
6.6.1.1. [Critical] Unsafe combinations of masks and Listeners may have led to segmentation fault
When entities are created, a Listener may be provided by the user to receive calls when specified events occur. The events of interest are set using a StatusKind mask. If an event set in the StatusKind mask occurs, but no callback function has been assigned by the user, a null pointer dereference will occur. Connext checks for many of these errors and prevents the creation of entities when this error is present. However, some of these cases were not checked, allowing unsafe combinations of masks and Listeners to be used. This problem has been resolved. The new, stricter checking may cause entity creation errors when no errors were detected before.
[RTI Issue ID CORE-12610]
6.6.1.2. [Critical] Failure calling DDS_Subscriber::get_datareaders in DDS_SubscriberListener::on_data_on_readers callback implementation
You may have seen the following errors when invoking DDS_Subscriber::get_datareaders() within the implementation of the DDS_SubscriberListener::on_data_on_readers() callback:
ERROR [0x01011B2D,0x8A450DE1,0xBAE5A2A0:0x80000009|SET GROUP LISTENER|GET READERS] REDACursor_modifyReadWriteArea:!freeze read write area
ERROR [0x01011B2D,0x8A450DE1,0xBAE5A2A0:0x80000009|SET GROUP LISTENER|GET READERS] PRESPsReaderGroup_getEA:!modify pres psReaderGroup
ERROR [0x01011B2D,0x8A450DE1,0xBAE5A2A0:0x80000009|SET GROUP LISTENER|GET READERS] PRESPsReaderGroup_lock:!take semaphore
ERROR [0x01011B2D,0x8A450DE1,0xBAE5A2A0:0x80000009|SET GROUP LISTENER|GET READERS] PRESPsReaderGroup_beginGetPsReaders:!get PRESPsReaderGroup_lock
ERROR [0x01011B2D,0x8A450DE1,0xBAE5A2A0:0x80000009|SET GROUP LISTENER|GET READERS}
DDS_Subscriber_begin_get_datareadersI:ERROR: Failed to get PRESPsReaderGroup_beginGetPsReaders
ERROR [0x01011B2D,0x8A450DE1,0xBAE5A2A0:0x80000009|SET GROUP LISTENER|GET READERS]
DDS_Subscriber_get_datareaders:ERROR: Failed to get DDS_Subscriber_begin_get_datareaders
In addition, when using the Traditional C++ API and the legacy .NET API, the application generated a segmentation fault after printing the error. The problem occurred only when:
You installed a Listener on the Subscriber using the API DDS_Subscriber::set_listener() after the Subscriber was enabled.
Or, you installed a Listener on the DomainParticipant using the API DDS_Participant::set_listener() after the DomainParticipant was enabled. This problem has been resolved.
[RTI Issue ID CORE-12316]
6.6.1.3. [Critical] Using certain callbacks at DomainParticipant or Publisher level may have led to segmentation fault
Handlers were not correctly implemented for the on_instance_replaced(), on_sample_removed(), on_application_acknowledgment(), and on_service_request_accepted() callbacks at the DomainParticipant and Publisher levels. This could have led to segmentation faults when the corresponding events were enabled. This problem has been resolved.
[RTI Issue ID CORE-12647]
6.6.1.4. [Major] DDS_SubscriberListener::on_data_on_readers on a participant or subscriber not called when Listener installed after the entity is enabled
The callback DDS_SubscriberListener::on_data_on_readers() was not invoked when there was data available, if these two conditions were met:
The Listener callback on_data_on_readers() was installed after the Subscriber or DomainParticipant implementing it was enabled.
The Listener callback on_data_available() was not installed at any level (DomainParticipant, Publisher, or DataReader).
This problem has been resolved.
[RTI Issue ID CORE-12338]
6.6.1.5. [Major] Unable to assign callback function for on_sample_removed event using Modern C++ API
You may have been unable to assign a callback function for the on_sample_removed event using the Modern C++ API. Support for this callback has been added to the Modern C++ API in this release.
[RTI Issue ID CORE-12646]