Skip to content

Commit

Permalink
Backport #25 to branch eloquent (#35)
Browse files Browse the repository at this point in the history
* Allow sharing DomainParticipant with C++ applications

Signed-off-by: Andrea Sorbini <[email protected]>
  • Loading branch information
asorbini authored Apr 14, 2021
1 parent 48a20f5 commit f8ef1a4
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,14 @@
#define RMW_CONNEXT_FAST_ENDPOINT_DISCOVERY 1
#endif /* RMW_CONNEXT_FAST_ENDPOINT_DISCOVERY */

/******************************************************************************
* Modify DomainParticipantQos to allow sharing of DDS entities created with
* the Connext C API with applications using the C++11 API.
******************************************************************************/
#ifndef RMW_CONNEXT_SHARE_DDS_ENTITIES_WITH_CPP
#define RMW_CONNEXT_SHARE_DDS_ENTITIES_WITH_CPP 1
#endif /* RMW_CONNEXT_SHARE_DDS_ENTITIES_WITH_CPP */

/******************************************************************************
* Override dds.transport.UDPv4.builtin.ignore_loopback_interface in
* DomainParticipantQos to force communication over loopback (in addition to
Expand Down
14 changes: 14 additions & 0 deletions rmw_connextdds_common/src/ndds/dds_api_ndds.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,20 @@ 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 f8ef1a4

Please sign in to comment.