Skip to content

Remove duplicate future handling from action client send_goal_async()#1532

Merged
fujitatomoya merged 1 commit intoros2:rollingfrom
nwn:nwn-fix-action-client-future
Oct 28, 2025
Merged

Remove duplicate future handling from action client send_goal_async()#1532
fujitatomoya merged 1 commit intoros2:rollingfrom
nwn:nwn-fix-action-client-future

Conversation

@nwn
Copy link
Copy Markdown
Contributor

@nwn nwn commented Oct 24, 2025

Description

A recent change (#1308) intended to move some future-handling logic into a lock context, but actually ended up duplicating it instead. The result is a resource leak in the Waitable's _futures list since the future is added twice but only removed once. This fixes that by removing the duplicated logic outside of the lock. It also preserves the explicit typing annotation on the future.

Is this user-facing behavior change?

No

Did you use Generative AI?

No

Additional Information

A recent change intended to move this logic into a lock context, but
actually ended up duplicating it instead. This fixes that by removing
the duplicated logic outside of the lock. It also preserves the explicit
typing annotation on the future.

Signed-off-by: Nathan Wiebe Neufeldt <wn.nathan@gmail.com>
@ahcorde ahcorde requested a review from fujitatomoya October 24, 2025 20:30
Copy link
Copy Markdown
Collaborator

@fujitatomoya fujitatomoya left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nwn really appreciate the PR, this look pretty much regression from #1308 as you reported.

lgtm with green CI.

@fujitatomoya
Copy link
Copy Markdown
Collaborator

@jmblixt3 can you also take a look?

Copy link
Copy Markdown
Contributor

@jmblixt3 jmblixt3 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. I think this got introduced since this got rebased so many times.

@jmblixt3
Copy link
Copy Markdown
Contributor

Will need to backported to all versions as well.

@fujitatomoya
Copy link
Copy Markdown
Collaborator

@jmblixt3 thank for the review, yeah it took a really long time to put it in, sorry about that.

@fujitatomoya
Copy link
Copy Markdown
Collaborator

fujitatomoya commented Oct 27, 2025

Pulls: #1532
Gist: https://gist.githubusercontent.com/fujitatomoya/a4693dc537bbd51e8eab2b0075deb033/raw/2a74e6fd4249ce17b71fc3b3e455f9ea9e4ddc88/ros2.repos
BUILD args: --packages-above-and-dependencies rclpy
TEST args: --packages-above rclpy
ROS Distro: rolling
Job: ci_launcher
ci_launcher ran: https://ci.ros2.org/job/ci_launcher/17376

  • Linux Build Status
  • Linux-aarch64 Build Status
  • Linux-rhel Build Status
  • Windows Build Status

@fujitatomoya
Copy link
Copy Markdown
Collaborator

all green, i will go head to merge this.

@fujitatomoya fujitatomoya merged commit 6e22af9 into ros2:rolling Oct 28, 2025
3 checks passed
@fujitatomoya
Copy link
Copy Markdown
Collaborator

@Mergifyio backport kilted

@mergify
Copy link
Copy Markdown
Contributor

mergify bot commented Oct 28, 2025

backport kilted

✅ Backports have been created

Details

mergify bot pushed a commit that referenced this pull request Oct 28, 2025
A recent change intended to move this logic into a lock context, but
actually ended up duplicating it instead. This fixes that by removing
the duplicated logic outside of the lock. It also preserves the explicit
typing annotation on the future.

Signed-off-by: Nathan Wiebe Neufeldt <wn.nathan@gmail.com>
(cherry picked from commit 6e22af9)
@nwn
Copy link
Copy Markdown
Contributor Author

nwn commented Oct 28, 2025

@fujitatomoya Thanks for merging!

#1308 needed manual backports to humble and jazzy. Let me know if an automated backport for this PR doesn't work and I can create the backports by hand.

@nwn nwn deleted the nwn-fix-action-client-future branch October 28, 2025 18:50
@fujitatomoya
Copy link
Copy Markdown
Collaborator

@nwn yeah right, thanks for fixing this.

nwn added a commit to nwn/rclpy that referenced this pull request Nov 1, 2025
A recent change intended to move this logic into a lock context, but
actually ended up duplicating it instead. This fixes that by removing
the duplicated logic outside of the lock.

Signed-off-by: Nathan Wiebe Neufeldt <wn.nathan@gmail.com>
(cherry picked from commit 6e22af9)
nwn added a commit to nwn/rclpy that referenced this pull request Nov 1, 2025
A recent change intended to move this logic into a lock context, but
actually ended up duplicating it instead. This fixes that by removing
the duplicated logic outside of the lock.

Signed-off-by: Nathan Wiebe Neufeldt <wn.nathan@gmail.com>
(cherry picked from commit 6e22af9)
@nwn
Copy link
Copy Markdown
Contributor Author

nwn commented Nov 1, 2025

I've created manual backports of this change to Humble and Jazzy since the typing annotations here were not present in those versions.

ahcorde pushed a commit that referenced this pull request Nov 4, 2025
A recent change intended to move this logic into a lock context, but
actually ended up duplicating it instead. This fixes that by removing
the duplicated logic outside of the lock.


(cherry picked from commit 6e22af9)

Signed-off-by: Nathan Wiebe Neufeldt <wn.nathan@gmail.com>
ahcorde pushed a commit that referenced this pull request Nov 4, 2025
A recent change intended to move this logic into a lock context, but
actually ended up duplicating it instead. This fixes that by removing
the duplicated logic outside of the lock.


(cherry picked from commit 6e22af9)

Signed-off-by: Nathan Wiebe Neufeldt <wn.nathan@gmail.com>
ahcorde pushed a commit that referenced this pull request Nov 4, 2025
A recent change intended to move this logic into a lock context, but
actually ended up duplicating it instead. This fixes that by removing
the duplicated logic outside of the lock. It also preserves the explicit
typing annotation on the future.


(cherry picked from commit 6e22af9)

Signed-off-by: Nathan Wiebe Neufeldt <wn.nathan@gmail.com>
Co-authored-by: Nathan Wiebe Neufeldt <wn.nathan@gmail.com>
InvincibleRMC pushed a commit to InvincibleRMC/rclpy that referenced this pull request Nov 20, 2025
A recent change intended to move this logic into a lock context, but
actually ended up duplicating it instead. This fixes that by removing
the duplicated logic outside of the lock. It also preserves the explicit
typing annotation on the future.

Signed-off-by: Nathan Wiebe Neufeldt <wn.nathan@gmail.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>
jplapp pushed a commit to pixel-robotics/rclpy that referenced this pull request Dec 12, 2025
…s2#1536)

A recent change intended to move this logic into a lock context, but
actually ended up duplicating it instead. This fixes that by removing
the duplicated logic outside of the lock.


(cherry picked from commit 6e22af9)

Signed-off-by: Nathan Wiebe Neufeldt <wn.nathan@gmail.com>
InvincibleRMC pushed a commit to InvincibleRMC/rclpy that referenced this pull request Jan 12, 2026
A recent change intended to move this logic into a lock context, but
actually ended up duplicating it instead. This fixes that by removing
the duplicated logic outside of the lock. It also preserves the explicit
typing annotation on the future.

Signed-off-by: Nathan Wiebe Neufeldt <wn.nathan@gmail.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>
InvincibleRMC added a commit that referenced this pull request Jan 21, 2026
)

* Fix warnings from gcc. (#1501)

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Update type_support to use new abcs

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Cleanup old test cases to use new automatic inference

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Add content-filtered-topic interfaces (#1506)

Signed-off-by: Barry Xu <Barry.Xu@sony.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Added lock to protect futures for multithreaded executor (#1477)

Signed-off-by: brennanmk <brennanmk2200@gmail.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* EventsExecutor: Handle async callbacks for services and subscriptions (#1478)

Closes #1473

Signed-off-by: Brad Martin <bmartin@fatlxception.org>
Co-authored-by: Brad Martin <bmartin@fatlxception.org>
Co-authored-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* add spinning state for the Executor classes. (#1510)

Signed-off-by: Tomoya.Fujita <tomoya.fujita825@gmail.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Fixes Action.*_async futures never complete (#1308)

Per rclpy:1123 If two seperate client server actions are running in seperate executors the future given to the ActionClient will never complete due to a race condition
This fixes  the calls to rcl handles potentially leading to deadlock scenarios by adding locks to there references
Co-authored-by: Aditya Agarwal <aditya.kgp25@gmail.com>
Co-authored-by: Jonathan Blixt <jmblixt3@gmail.com>
Signed-off-by: Jonathan Blixt <jmblixt3@gmail.com>

Co-authored-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* remove unused 'param_type' (#1524)

'param_type' is set but never used

Signed-off-by: Christian Rauch <Christian.Rauch@unileoben.ac.at>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Changelog

Signed-off-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* 10.0.1

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Remove duplicate future handling from send_goal_async (#1532)

A recent change intended to move this logic into a lock context, but
actually ended up duplicating it instead. This fixes that by removing
the duplicated logic outside of the lock. It also preserves the explicit
typing annotation on the future.

Signed-off-by: Nathan Wiebe Neufeldt <wn.nathan@gmail.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* fix(test_events_executor): destroy all nodes before shutdown (#1538)

Signed-off-by: yuanyuyuan <az6980522@gmail.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* add BaseImpl

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Add ImplT Support

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* fix changelong

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Remove accidental tuple (#1542)

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Allow action servers without execute callback (#1219)

Signed-off-by: Tim Clephas <tim.clephas@nobleo.nl>

* add : get clients, servers info (#1307)

Signed-off-by: Minju, Lee <dlalswn531@naver.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* 10.0.2

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* update tests

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* ParameterEventHandler support ContentFiltering (#1531)

* ParameterEventHandler support ContentFiltering

Signed-off-by: Barry Xu <barry.xu@sony.com>

* Address review comments

Signed-off-by: Barry Xu <barry.xu@sony.com>

---------

Signed-off-by: Barry Xu <barry.xu@sony.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Fix issues with resuming async tasks awaiting a future (#1469)

Signed-off-by: Błażej Sowa <bsowa123@gmail.com>
Signed-off-by: Nadav Elkabets <elnadav12@gmail.com>
Co-authored-by: Nadav Elkabets <32939935+nadavelkabets@users.noreply.github.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* 10.0.3

Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Increase clock accuracy (#1564)

Signed-off-by: Florian Vahl <git@flova.de>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Use unconditional wait when possible. (#1563)

Previously the max() value of the steady time was used as the default deadline. In some environments this results in overflows in the underlying pthread_cond_timedwait call, which waits for the conditional variable in the events queue implementation. Consequently, this lead to freezes in the executor. Reducing the deadline significantly helped, but using `cv.wait` instead of `cv_.wait_until` seems to be the cleaner solution.

Signed-off-by: Florian Vahl <florian.vahl@dlr.de>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Remove default from switch with enum, so that compiler warns. (#1566)

Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Fix parameter parsing for unspecified target nodes (#1552)

Signed-off-by: Barry Xu <barry.xu@sony.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Improve the compatibility of processing YAML parameter files (#1548)

Signed-off-by: Barry Xu <barry.xu@sony.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Improve wildcard parsing and optimize the logic for parsing YAML para… (#1571)

Signed-off-by: Barry Xu <barry.xu@sony.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Expose action graph functions as Node class methods. (#1574)

* Expose action graph functions as Node class methods.

Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com>

* address review comments to keep the warning consistent.

Signed-off-by: Tomoya.Fujita <Tomoya.Fujita@sony.com>

---------

Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
Signed-off-by: Tomoya.Fujita <Tomoya.Fujita@sony.com>

* Fix performance bug in MultiThreadedExecutor (hopefully) (#1547)

Signed-off-by: Michael Tandy <git@mjt.me.uk>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Changelog

Signed-off-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* 10.0.4

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* use Msg over BaseMessage

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Use Srv over BaseService

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Use Action over BaseAction

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* lint

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

* Update rclpy/rclpy/type_support.py

Co-authored-by: Christophe Bedard <bedard.christophe@gmail.com>
Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>

---------

Signed-off-by: Michael Carlstrom <rmc@carlstrom.com>
Signed-off-by: Barry Xu <Barry.Xu@sony.com>
Signed-off-by: brennanmk <brennanmk2200@gmail.com>
Signed-off-by: Brad Martin <bmartin@fatlxception.org>
Signed-off-by: Tomoya.Fujita <tomoya.fujita825@gmail.com>
Signed-off-by: Christian Rauch <Christian.Rauch@unileoben.ac.at>
Signed-off-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>
Signed-off-by: Nathan Wiebe Neufeldt <wn.nathan@gmail.com>
Signed-off-by: yuanyuyuan <az6980522@gmail.com>
Signed-off-by: Tim Clephas <tim.clephas@nobleo.nl>
Signed-off-by: Minju, Lee <dlalswn531@naver.com>
Signed-off-by: Barry Xu <barry.xu@sony.com>
Signed-off-by: Błażej Sowa <bsowa123@gmail.com>
Signed-off-by: Nadav Elkabets <elnadav12@gmail.com>
Signed-off-by: Michael Carroll <mjcarroll@intrinsic.ai>
Signed-off-by: Florian Vahl <git@flova.de>
Signed-off-by: Florian Vahl <florian.vahl@dlr.de>
Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
Signed-off-by: Tomoya.Fujita <Tomoya.Fujita@sony.com>
Signed-off-by: Michael Tandy <git@mjt.me.uk>
Co-authored-by: Chris Lalancette <clalancette@gmail.com>
Co-authored-by: Barry Xu <barry.xu@sony.com>
Co-authored-by: Brennan Miller-Klugman <55165406+brennanmk@users.noreply.github.com>
Co-authored-by: Brad Martin <52003535+bmartin427@users.noreply.github.com>
Co-authored-by: Brad Martin <bmartin@fatlxception.org>
Co-authored-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>
Co-authored-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
Co-authored-by: Jonathan <jmblixt3@gmail.com>
Co-authored-by: Christian Rauch <Christian.Rauch@unileoben.ac.at>
Co-authored-by: Nathan Wiebe Neufeldt <wn.nathan@gmail.com>
Co-authored-by: Yuyuan Yuan <az6980522@gmail.com>
Co-authored-by: Tim Clephas <tim.clephas@nobleo.nl>
Co-authored-by: Minju, Lee <70446214+leeminju531@users.noreply.github.com>
Co-authored-by: Błażej Sowa <bsowa123@gmail.com>
Co-authored-by: Nadav Elkabets <32939935+nadavelkabets@users.noreply.github.com>
Co-authored-by: Michael Carroll <mjcarroll@intrinsic.ai>
Co-authored-by: Florian Vahl <git@flova.de>
Co-authored-by: Michael Tandy <git@mjt.me.uk>
Co-authored-by: Christophe Bedard <bedard.christophe@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants