Allow client to trigger another service call from its callback (#415)
This commit is contained in:
parent
284dc17918
commit
e9f0328ec8
1 changed files with 4 additions and 1 deletions
|
@ -197,7 +197,7 @@ public:
|
||||||
std::shared_ptr<rmw_request_id_t> request_header,
|
std::shared_ptr<rmw_request_id_t> request_header,
|
||||||
std::shared_ptr<void> response)
|
std::shared_ptr<void> response)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(pending_requests_mutex_);
|
std::unique_lock<std::mutex> lock(pending_requests_mutex_);
|
||||||
auto typed_response = std::static_pointer_cast<typename ServiceT::Response>(response);
|
auto typed_response = std::static_pointer_cast<typename ServiceT::Response>(response);
|
||||||
int64_t sequence_number = request_header->sequence_number;
|
int64_t sequence_number = request_header->sequence_number;
|
||||||
// TODO(esteve) this should throw instead since it is not expected to happen in the first place
|
// TODO(esteve) this should throw instead since it is not expected to happen in the first place
|
||||||
|
@ -210,6 +210,9 @@ public:
|
||||||
auto callback = std::get<1>(tuple);
|
auto callback = std::get<1>(tuple);
|
||||||
auto future = std::get<2>(tuple);
|
auto future = std::get<2>(tuple);
|
||||||
this->pending_requests_.erase(sequence_number);
|
this->pending_requests_.erase(sequence_number);
|
||||||
|
// Unlock here to allow the service to be called recursively from one of its callbacks.
|
||||||
|
lock.unlock();
|
||||||
|
|
||||||
call_promise->set_value(typed_response);
|
call_promise->set_value(typed_response);
|
||||||
callback(future);
|
callback(future);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue