Skip to content

Commit

Permalink
Not creating rosout publisher instance unless required.
Browse files Browse the repository at this point in the history
rcl_logging_rosout_enabled is provided to check if logging rosout is enabled.

Signed-off-by: Tomoya.Fujita <Tomoya.Fujita@sony.com>
  • Loading branch information
fujitatomoya committed Oct 16, 2019
1 parent 8e0b72e commit d39b8fa
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 9 deletions.
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 `FALUSE` 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

0 comments on commit d39b8fa

Please sign in to comment.