Merge pull request #63 from ros2/check_rmw_return_codes

add missing checks for rmw return codes
This commit is contained in:
Dirk Thomas 2015-07-21 16:01:25 -07:00
commit 3902ba2ddb
3 changed files with 27 additions and 7 deletions

View file

@ -52,8 +52,11 @@ public:
virtual ~Executor() virtual ~Executor()
{ {
if (interrupt_guard_condition_ != nullptr) { if (interrupt_guard_condition_ != nullptr) {
// TODO(wjwwood): Check ret code. rmw_ret_t status = rmw_destroy_guard_condition(interrupt_guard_condition_);
rmw_destroy_guard_condition(interrupt_guard_condition_); if (status != RMW_RET_OK) {
fprintf(stderr,
"[rclcpp::error] failed to destroy guard condition: %s\n", rmw_get_error_string_safe());
}
} }
} }

View file

@ -121,7 +121,11 @@ public:
if (!rclcpp::utilities::ok()) { if (!rclcpp::utilities::ok()) {
return; return;
} }
rmw_trigger_guard_condition(guard_condition_); rmw_ret_t status = rmw_trigger_guard_condition(guard_condition_);
if (status != RMW_RET_OK) {
fprintf(stderr,
"[rclcpp::error] failed to trigger guard condition: %s\n", rmw_get_error_string_safe());
}
} }
} }

View file

@ -79,7 +79,11 @@ signal_handler(int signal_value)
} }
#endif #endif
g_signal_status = signal_value; g_signal_status = signal_value;
rmw_trigger_guard_condition(g_sigint_guard_cond_handle); rmw_ret_t status = rmw_trigger_guard_condition(g_sigint_guard_cond_handle);
if (status != RMW_RET_OK) {
fprintf(stderr,
"[rclcpp::error] failed to trigger guard condition: %s\n", rmw_get_error_string_safe());
}
g_interrupt_condition_variable.notify_all(); g_interrupt_condition_variable.notify_all();
} }
} // namespace } // namespace
@ -97,8 +101,13 @@ init(int argc, char * argv[])
{ {
(void)argc; (void)argc;
(void)argv; (void)argv;
// TODO(wjwwood): Handle rmw_ret_t's value. rmw_ret_t status = rmw_init();
rmw_init(); if (status != RMW_RET_OK) {
// *INDENT-OFF* (prevent uncrustify from making unecessary indents here)
throw std::runtime_error(
std::string("failed to initialize rmw implementation: ") + rmw_get_error_string_safe());
// *INDENT-ON*
}
#ifdef HAS_SIGACTION #ifdef HAS_SIGACTION
struct sigaction action; struct sigaction action;
memset(&action, 0, sizeof(action)); memset(&action, 0, sizeof(action));
@ -131,7 +140,11 @@ void
shutdown() shutdown()
{ {
g_signal_status = SIGINT; g_signal_status = SIGINT;
rmw_trigger_guard_condition(g_sigint_guard_cond_handle); rmw_ret_t status = rmw_trigger_guard_condition(g_sigint_guard_cond_handle);
if (status != RMW_RET_OK) {
fprintf(stderr,
"[rclcpp::error] failed to trigger guard condition: %s\n", rmw_get_error_string_safe());
}
g_interrupt_condition_variable.notify_all(); g_interrupt_condition_variable.notify_all();
} }