diff --git a/rmw_cyclonedds_cpp/src/rmw_node.cpp b/rmw_cyclonedds_cpp/src/rmw_node.cpp index c7a4cbf..9a5c62a 100644 --- a/rmw_cyclonedds_cpp/src/rmw_node.cpp +++ b/rmw_cyclonedds_cpp/src/rmw_node.cpp @@ -1498,23 +1498,24 @@ static dds_entity_t create_topic(dds_entity_t pp, struct ddsi_sertopic * sertopi return tp; } -void set_error_message_from_create_topic(dds_entity_t topic) +void set_error_message_from_create_topic(dds_entity_t topic, const std::string & topic_name) { assert(topic < 0); if (DDS_RETCODE_BAD_PARAMETER == topic) { - RMW_SET_ERROR_MSG( - "failed to create topic because the function was given" - " invalid parameters"); + const std::string error_msg = "failed to create topic [" + topic_name + + "] because the function was given invalid parameters"; + RMW_SET_ERROR_MSG(error_msg.c_str()); } else if (DDS_RETCODE_INCONSISTENT_POLICY == topic) { - RMW_SET_ERROR_MSG( - "failed to create topic because it's already in use" - " in this context with incompatible QoS settings"); + const std::string error_msg = "failed to create topic [" + topic_name + + "] because it's already in use in this context with incompatible QoS settings"; + RMW_SET_ERROR_MSG(error_msg.c_str()); } else if (DDS_RETCODE_PRECONDITION_NOT_MET == topic) { - RMW_SET_ERROR_MSG( - "failed to create topic because it's already in use" - " in this context with a different message type"); + const std::string error_msg = "failed to create topic [" + topic_name + + "] because it's already in use in this context with a different message type"; + RMW_SET_ERROR_MSG(error_msg.c_str()); } else { - RMW_SET_ERROR_MSG("failed to create topic for unknown reasons"); + const std::string error_msg = "failed to create topic [" + topic_name + "] for unknown reasons"; + RMW_SET_ERROR_MSG(error_msg.c_str()); } } @@ -1895,7 +1896,7 @@ static CddsPublisher * create_cdds_publisher( struct ddsi_sertopic * stact; topic = create_topic(dds_ppant, sertopic, &stact); if (topic < 0) { - set_error_message_from_create_topic(topic); + set_error_message_from_create_topic(topic, fqtopic_name); goto fail_topic; } if ((qos = create_readwrite_qos(qos_policies, false)) == nullptr) { @@ -2270,7 +2271,7 @@ static CddsSubscription * create_cdds_subscription( rmw_cyclonedds_cpp::make_message_value_type(type_supports)); topic = create_topic(dds_ppant, sertopic); if (topic < 0) { - set_error_message_from_create_topic(topic); + set_error_message_from_create_topic(topic, fqtopic_name); goto fail_topic; } if ((qos = create_readwrite_qos(qos_policies, ignore_local_publications)) == nullptr) { @@ -3862,7 +3863,7 @@ static rmw_ret_t rmw_init_cs( struct ddsi_sertopic * pub_stact; pubtopic = create_topic(node->context->impl->ppant, pub_st, &pub_stact); if (pubtopic < 0) { - set_error_message_from_create_topic(pubtopic); + set_error_message_from_create_topic(pubtopic, pubtopic_name); goto fail_pubtopic; } @@ -3871,7 +3872,7 @@ static rmw_ret_t rmw_init_cs( std::move(sub_msg_ts)); subtopic = create_topic(node->context->impl->ppant, sub_st); if (subtopic < 0) { - set_error_message_from_create_topic(subtopic); + set_error_message_from_create_topic(subtopic, subtopic_name); goto fail_subtopic; } // before proceeding to outright ignore given QoS policies, sanity check them