Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions rcl/include/rcl/logging.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,25 @@ RCL_PUBLIC
RCL_WARN_UNUSED
rcl_ret_t rcl_logging_fini();

/// See if logging rosout is enabled.
/**
* This function is meant to be used to check if logging rosout is enabled.
*
* <hr>
* Attribute | Adherence
* ------------------ | -------------
* Allocates Memory | No
* Thread-Safe | Yes
* Uses Atomics | No
* Lock-Free | Yes
*
* \return `TRUE` if logging rosout is enabled, or
* \return `FALSE` if logging rosout is disabled.
*/
RCL_PUBLIC
RCL_WARN_UNUSED
bool rcl_logging_rosout_enabled();

#ifdef __cplusplus
}
#endif
Expand Down
5 changes: 5 additions & 0 deletions rcl/src/rcl/logging.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,11 @@ rcl_ret_t rcl_logging_fini()
return status;
}

bool rcl_logging_rosout_enabled()
{
return g_rcl_logging_rosout_enabled;
}

static
void
rcl_logging_multiple_output_handler(
Expand Down
24 changes: 15 additions & 9 deletions rcl/src/rcl/node.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ extern "C"

#include "rcl/arguments.h"
#include "rcl/error_handling.h"
#include "rcl/logging.h"
#include "rcl/logging_rosout.h"
#include "rcl/rcl.h"
#include "rcl/remap.h"
Expand Down Expand Up @@ -355,17 +356,19 @@ rcl_node_init(
}
// The initialization for the rosout publisher requires the node to be in initialized to a point
// that it can create new topic publishers
ret = rcl_logging_rosout_init_publisher_for_node(node);
if (ret != RCL_RET_OK) {
// error message already set
goto fail;
if (rcl_logging_rosout_enabled()) {
ret = rcl_logging_rosout_init_publisher_for_node(node);
if (ret != RCL_RET_OK) {
// error message already set
goto fail;
}
}
RCUTILS_LOG_DEBUG_NAMED(ROS_PACKAGE_NAME, "Node initialized");
ret = RCL_RET_OK;
goto cleanup;
fail:
if (node->impl) {
if (node->impl->logger_name) {
if (rcl_logging_rosout_enabled() && node->impl->logger_name) {
ret = rcl_logging_rosout_fini_publisher_for_node(node);
RCUTILS_LOG_ERROR_EXPRESSION_NAMED((ret != RCL_RET_OK && ret != RCL_RET_NOT_INIT),
ROS_PACKAGE_NAME, "Failed to fini publisher for node: %i", ret);
Expand Down Expand Up @@ -431,10 +434,13 @@ rcl_node_fini(rcl_node_t * node)
}
rcl_allocator_t allocator = node->impl->options.allocator;
rcl_ret_t result = RCL_RET_OK;
rcl_ret_t rcl_ret = rcl_logging_rosout_fini_publisher_for_node(node);
if (rcl_ret != RCL_RET_OK && rcl_ret != RCL_RET_NOT_INIT) {
RCL_SET_ERROR_MSG("Unable to fini publisher for node.");
result = RCL_RET_ERROR;
rcl_ret_t rcl_ret = RCL_RET_OK;
if (rcl_logging_rosout_enabled()) {
rcl_ret = rcl_logging_rosout_fini_publisher_for_node(node);
if (rcl_ret != RCL_RET_OK && rcl_ret != RCL_RET_NOT_INIT) {
RCL_SET_ERROR_MSG("Unable to fini publisher for node.");
result = RCL_RET_ERROR;
}
}
rmw_ret_t rmw_ret = rmw_destroy_node(node->impl->rmw_node_handle);
if (rmw_ret != RMW_RET_OK) {
Expand Down