Function rmw_count_services

Function Documentation

rmw_ret_t rmw_count_services(const rmw_node_t *node, const char *service_name, size_t *count)

Count the number of known servers matching a service name.

This function returns the numbers of servers of a given service in the ROS graph, as discovered so far by the given node.

Attribute

Adherence

Allocates Memory

No

Thread-Safe

Yes

Uses Atomics

Maybe [1]

Lock-Free

Maybe [1]

[1] implementation defined, check the implementation documentation

Runtime behavior

To query the ROS graph is a synchronous operation. It is also non-blocking, but it is not guaranteed to be lock-free. Generally speaking, implementations may synchronize access to internal resources using locks but are not allowed to wait for events with no guaranteed time bound (barring the effects of starvation due to OS scheduling).

Thread-safety

Nodes are thread-safe objects, and so are all operations on them except for finalization. Therefore, it is safe to query the ROS graph using the same node concurrently. However, access to primitive data-type arguments is not synchronized. It is not safe to read or write service_name or count while rmw_count_services() uses them.

Parameters:
  • node[in] Handle to node to use to query the ROS graph.

  • service_name[in] Fully qualified ROS topic name.

  • count[out] Number of services matching the given topic name.

Pre:

Given node must be a valid node handle, as returned by rmw_create_node().

Returns:

RMW_RET_OK if the query was successful, or

Returns:

RMW_RET_INVALID_ARGUMENT if node is NULL, or

Returns:

RMW_RET_INVALID_ARGUMENT if service_name is NULL, or

Returns:

RMW_RET_INVALID_ARGUMENT if service_name is not a fully qualified service name, by rmw_validate_full_topic_name() definition, or

Returns:

RMW_RET_INVALID_ARGUMENT if count is NULL, or

Returns:

RMW_RET_INCORRECT_RMW_IMPLEMENTATION if the node implementation identifier does not match this implementation, or

Returns:

RMW_RET_ERROR if an unspecified error occurs.