Пример #1
0
GraphListener::GraphListener()
: is_started_(false), is_shutdown_(false), shutdown_guard_condition_(nullptr)
{
  rcl_ret_t ret = rcl_guard_condition_init(
    &interrupt_guard_condition_,
    rcl_guard_condition_get_default_options());
  if (RCL_RET_OK != ret) {
    throw_from_rcl_error(ret, "failed to create interrupt guard condition");
  }

  shutdown_guard_condition_ = rclcpp::utilities::get_sigint_guard_condition(&wait_set_);
}
Пример #2
0
rcl_guard_condition_t *
rclcpp::utilities::get_sigint_guard_condition(rcl_wait_set_t * waitset)
{
  std::lock_guard<std::mutex> lock(g_sigint_guard_cond_handles_mutex);
  auto kv = g_sigint_guard_cond_handles.find(waitset);
  if (kv != g_sigint_guard_cond_handles.end()) {
    return &kv->second;
  } else {
    rcl_guard_condition_t handle =
      rcl_get_zero_initialized_guard_condition();
    rcl_guard_condition_options_t options = rcl_guard_condition_get_default_options();
    if (rcl_guard_condition_init(&handle, options) != RCL_RET_OK) {
      // *INDENT-OFF* (prevent uncrustify from making unnecessary indents here)
      throw std::runtime_error(std::string(
        "Couldn't initialize guard condition: ") + rcl_get_error_string_safe());
      // *INDENT-ON*
    }
    g_sigint_guard_cond_handles[waitset] = handle;
    return &g_sigint_guard_cond_handles[waitset];
  }
}