Skip to content

Commit

Permalink
Always modify UserObjectQosPolicy regardless of override policy (#53)
Browse files Browse the repository at this point in the history
Signed-off-by: Andrea Sorbini <[email protected]>
  • Loading branch information
asorbini authored Apr 28, 2021
1 parent 46892f5 commit 9d0dec6
Showing 1 changed file with 18 additions and 14 deletions.
32 changes: 18 additions & 14 deletions rmw_connextdds_common/src/ndds/dds_api_ndds.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,24 @@ rmw_connextdds_initialize_participant_qos_impl(
rmw_context_impl_t * const ctx,
DDS_DomainParticipantQos * const dp_qos)
{
#if RMW_CONNEXT_SHARE_DDS_ENTITIES_WITH_CPP
// UserObjectQosPolicy is an internal, undocumented Connext policy used by the
// implementations of different language bindings to control the memory
// representations of various objects created by user applications. In this
// case, the settings match the requirements of the "modern C++" API, and they
// allow the DomainParticipant to be used directly by applications that want
// to create new entities in C++11, even though the participant was created
// using the C API. If these settings are not specified, an application will
// receive a SIGSEGV when trying to create one of these entities.
//
// The customizations are always applied regardless of the QoS override policy
// because UserObjectQosPolicy cannot be modified from XML.
//
dp_qos->user_object.flow_controller_user_object.size = sizeof(void *);
dp_qos->user_object.topic_user_object.size = sizeof(void *);
dp_qos->user_object.content_filtered_topic_user_object.size = sizeof(void *);
#endif /* RMW_CONNEXT_SHARE_DDS_ENTITIES_WITH_CPP */

switch (ctx->participant_qos_override_policy) {
case rmw_context_impl_t::participant_qos_override_policy_t::All:
case rmw_context_impl_t::participant_qos_override_policy_t::Basic:
Expand Down Expand Up @@ -208,20 +226,6 @@ rmw_connextdds_initialize_participant_qos_impl(
}
#endif /* RMW_CONNEXT_FAST_ENDPOINT_DISCOVERY */

#if RMW_CONNEXT_SHARE_DDS_ENTITIES_WITH_CPP
// UserObjectQosPolicy is an internal, undocumented Connext policy used by the
// implementations of different language bindings to control the memory
// representations of various objects created by user applications. In this
// case, the settings match the requirements of the "modern C++" API, and they
// allow the DomainParticipant to be used directly by applications that want
// to create new entities in C++11, even though the participant was created
// using the C API. If these settings are not specified, an application will
// receive a SIGSEGV when trying to create one of these entities.
dp_qos->user_object.flow_controller_user_object.size = sizeof(void *);
dp_qos->user_object.topic_user_object.size = sizeof(void *);
dp_qos->user_object.content_filtered_topic_user_object.size = sizeof(void *);
#endif /* RMW_CONNEXT_SHARE_DDS_ENTITIES_WITH_CPP */

return RMW_RET_OK;
}

Expand Down

0 comments on commit 9d0dec6

Please sign in to comment.