Skip to content

Commit f0afcab

Browse files
committed
fix client and service creation in Node constructor
1 parent 83b610e commit f0afcab

3 files changed

Lines changed: 19 additions & 13 deletions

File tree

rclcpp/include/rclcpp/client.hpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
#include "rclcpp/function_traits.hpp"
3131
#include "rclcpp/macros.hpp"
32+
#include "rclcpp/node_interfaces/node_graph_interface.hpp"
3233
#include "rclcpp/type_support_decl.hpp"
3334
#include "rclcpp/utilities.hpp"
3435
#include "rclcpp/visibility_control.hpp"
@@ -39,10 +40,10 @@
3940
namespace rclcpp
4041
{
4142

42-
namespace node
43+
namespace node_interfaces
4344
{
44-
class Node;
45-
} // namespace node
45+
class NodeBaseInterface;
46+
} // namespace node_interfaces
4647

4748
namespace client
4849
{
@@ -54,7 +55,8 @@ class ClientBase
5455

5556
RCLCPP_PUBLIC
5657
ClientBase(
57-
std::shared_ptr<rclcpp::node::Node> parent_node,
58+
rclcpp::node_interfaces::NodeBaseInterface * node_base,
59+
rclcpp::node_interfaces::NodeGraphInterface::SharedPtr node_graph,
5860
const std::string & service_name);
5961

6062
RCLCPP_PUBLIC
@@ -98,7 +100,7 @@ class ClientBase
98100
rcl_node_t *
99101
get_rcl_node_handle() const;
100102

101-
std::weak_ptr<rclcpp::node::Node> node_;
103+
rclcpp::node_interfaces::NodeGraphInterface::WeakPtr node_graph_;
102104
std::shared_ptr<rcl_node_t> node_handle_;
103105

104106
rcl_client_t client_handle_ = rcl_get_zero_initialized_client();
@@ -127,10 +129,11 @@ class Client : public ClientBase
127129
RCLCPP_SMART_PTR_DEFINITIONS(Client)
128130

129131
Client(
130-
std::shared_ptr<rclcpp::node::Node> parent_node,
132+
rclcpp::node_interfaces::NodeBaseInterface * node_base,
133+
rclcpp::node_interfaces::NodeGraphInterface::SharedPtr node_graph,
131134
const std::string & service_name,
132135
rcl_client_options_t & client_options)
133-
: ClientBase(parent_node, service_name)
136+
: ClientBase(node_base, node_graph, service_name)
134137
{
135138
using rosidl_typesupport_cpp::get_service_type_support_handle;
136139
auto service_type_support_handle =

rclcpp/include/rclcpp/node_impl.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ Node::create_client(
168168
using rclcpp::client::ClientBase;
169169

170170
auto cli = Client<ServiceT>::make_shared(
171-
shared_from_this(),
171+
node_base_.get(),
172+
node_graph_,
172173
service_name,
173174
options);
174175

rclcpp/src/rclcpp/client.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,20 @@
2323
#include "rcl/node.h"
2424
#include "rcl/wait.h"
2525
#include "rclcpp/exceptions.hpp"
26-
#include "rclcpp/node.hpp"
26+
#include "rclcpp/node_interfaces/node_base_interface.hpp"
27+
#include "rclcpp/node_interfaces/node_graph_interface.hpp"
2728
#include "rclcpp/utilities.hpp"
2829

2930
using rclcpp::client::ClientBase;
3031
using rclcpp::exceptions::InvalidNodeError;
3132
using rclcpp::exceptions::throw_from_rcl_error;
3233

3334
ClientBase::ClientBase(
34-
std::shared_ptr<rclcpp::node::Node> parent_node,
35+
rclcpp::node_interfaces::NodeBaseInterface * node_base,
36+
rclcpp::node_interfaces::NodeGraphInterface::SharedPtr node_graph,
3537
const std::string & service_name)
36-
: node_(parent_node),
37-
node_handle_(parent_node->get_node_base_interface()->get_shared_rcl_node_handle()),
38+
: node_graph_(node_graph),
39+
node_handle_(node_base->get_shared_rcl_node_handle()),
3840
service_name_(service_name)
3941
{}
4042

@@ -77,7 +79,7 @@ ClientBase::wait_for_service_nanoseconds(std::chrono::nanoseconds timeout)
7779
return false;
7880
}
7981
// make an event to reuse, rather than create a new one each time
80-
auto node_ptr = node_.lock();
82+
auto node_ptr = node_graph_.lock();
8183
if (!node_ptr) {
8284
throw InvalidNodeError();
8385
}

0 commit comments

Comments
 (0)