Merge pull request #43 from ros2/throw_if_rmw_fails
throw exception when rmw functions return null
This commit is contained in:
commit
fa1f11eace
1 changed files with 28 additions and 0 deletions
|
@ -17,8 +17,10 @@
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <stdexcept>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#include <rmw/error_handling.h>
|
||||||
#include <rmw/rmw.h>
|
#include <rmw/rmw.h>
|
||||||
#include <rosidl_generator_cpp/message_type_support.hpp>
|
#include <rosidl_generator_cpp/message_type_support.hpp>
|
||||||
#include <rosidl_generator_cpp/service_type_support.hpp>
|
#include <rosidl_generator_cpp/service_type_support.hpp>
|
||||||
|
@ -43,6 +45,12 @@ Node::Node(std::string node_name, context::Context::SharedPtr context)
|
||||||
number_of_subscriptions_(0), number_of_timers_(0), number_of_services_(0)
|
number_of_subscriptions_(0), number_of_timers_(0), number_of_services_(0)
|
||||||
{
|
{
|
||||||
node_handle_ = rmw_create_node(name_.c_str());
|
node_handle_ = rmw_create_node(name_.c_str());
|
||||||
|
if (!node_handle_) {
|
||||||
|
throw std::runtime_error(
|
||||||
|
std::string("could not create node: ") +
|
||||||
|
(rmw_get_error_string() ? rmw_get_error_string() : ""));
|
||||||
|
}
|
||||||
|
|
||||||
using rclcpp::callback_group::CallbackGroupType;
|
using rclcpp::callback_group::CallbackGroupType;
|
||||||
default_callback_group_ = \
|
default_callback_group_ = \
|
||||||
create_callback_group(CallbackGroupType::MutuallyExclusive);
|
create_callback_group(CallbackGroupType::MutuallyExclusive);
|
||||||
|
@ -70,6 +78,11 @@ Node::create_publisher(std::string topic_name, size_t queue_size)
|
||||||
auto type_support_handle = get_message_type_support_handle<MessageT>();
|
auto type_support_handle = get_message_type_support_handle<MessageT>();
|
||||||
rmw_publisher_t * publisher_handle = rmw_create_publisher(
|
rmw_publisher_t * publisher_handle = rmw_create_publisher(
|
||||||
node_handle_, type_support_handle, topic_name.c_str(), queue_size);
|
node_handle_, type_support_handle, topic_name.c_str(), queue_size);
|
||||||
|
if (!publisher_handle) {
|
||||||
|
throw std::runtime_error(
|
||||||
|
std::string("could not create publisher: ") +
|
||||||
|
(rmw_get_error_string() ? rmw_get_error_string() : ""));
|
||||||
|
}
|
||||||
|
|
||||||
return publisher::Publisher::make_shared(publisher_handle);
|
return publisher::Publisher::make_shared(publisher_handle);
|
||||||
}
|
}
|
||||||
|
@ -99,6 +112,11 @@ Node::create_subscription(
|
||||||
auto type_support_handle = get_message_type_support_handle<MessageT>();
|
auto type_support_handle = get_message_type_support_handle<MessageT>();
|
||||||
rmw_subscription_t * subscriber_handle = rmw_create_subscription(
|
rmw_subscription_t * subscriber_handle = rmw_create_subscription(
|
||||||
node_handle_, type_support_handle, topic_name.c_str(), queue_size);
|
node_handle_, type_support_handle, topic_name.c_str(), queue_size);
|
||||||
|
if (!subscriber_handle) {
|
||||||
|
throw std::runtime_error(
|
||||||
|
std::string("could not create subscription: ") +
|
||||||
|
(rmw_get_error_string() ? rmw_get_error_string() : ""));
|
||||||
|
}
|
||||||
|
|
||||||
using namespace rclcpp::subscription;
|
using namespace rclcpp::subscription;
|
||||||
|
|
||||||
|
@ -164,6 +182,11 @@ Node::create_client(
|
||||||
|
|
||||||
rmw_client_t * client_handle = rmw_create_client(
|
rmw_client_t * client_handle = rmw_create_client(
|
||||||
this->node_handle_, service_type_support_handle, service_name.c_str());
|
this->node_handle_, service_type_support_handle, service_name.c_str());
|
||||||
|
if (!client_handle) {
|
||||||
|
throw std::runtime_error(
|
||||||
|
std::string("could not create client: ") +
|
||||||
|
(rmw_get_error_string() ? rmw_get_error_string() : ""));
|
||||||
|
}
|
||||||
|
|
||||||
using namespace rclcpp::client;
|
using namespace rclcpp::client;
|
||||||
|
|
||||||
|
@ -199,6 +222,11 @@ Node::create_service(
|
||||||
|
|
||||||
rmw_service_t * service_handle = rmw_create_service(
|
rmw_service_t * service_handle = rmw_create_service(
|
||||||
this->node_handle_, service_type_support_handle, service_name.c_str());
|
this->node_handle_, service_type_support_handle, service_name.c_str());
|
||||||
|
if (!service_handle) {
|
||||||
|
throw std::runtime_error(
|
||||||
|
std::string("could not create service: ") +
|
||||||
|
(rmw_get_error_string() ? rmw_get_error_string() : ""));
|
||||||
|
}
|
||||||
|
|
||||||
auto serv = create_service_internal<ServiceT>(
|
auto serv = create_service_internal<ServiceT>(
|
||||||
service_handle, service_name, callback);
|
service_handle, service_name, callback);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue