File tree Expand file tree Collapse file tree 1 file changed +20
-0
lines changed
Expand file tree Collapse file tree 1 file changed +20
-0
lines changed Original file line number Diff line number Diff line change @@ -46,6 +46,16 @@ class co_waiter {
4646 public:
4747 co_waiter () = default ;
4848
49+ ~co_waiter () {
50+ // Clear the cancellation slot to prevent use-after-scope
51+ if (handler) {
52+ auto slot = boost::asio::get_associated_cancellation_slot (*handler);
53+ if (slot.is_connected ()) {
54+ slot.clear ();
55+ }
56+ }
57+ }
58+
4959 // copy and move are disabled because the cancellation handler captures 'this'
5060 co_waiter (const co_waiter&) = delete ;
5161 co_waiter& operator =(const co_waiter&) = delete ;
@@ -116,6 +126,16 @@ class co_waiter<void, Executor> {
116126 public:
117127 co_waiter () = default ;
118128
129+ ~co_waiter () {
130+ // Clear the cancellation slot to prevent use-after-scope
131+ if (handler) {
132+ auto slot = boost::asio::get_associated_cancellation_slot (*handler);
133+ if (slot.is_connected ()) {
134+ slot.clear ();
135+ }
136+ }
137+ }
138+
119139 // copy and move are disabled because the cancellation handler captures 'this'
120140 co_waiter (const co_waiter&) = delete ;
121141 co_waiter& operator =(const co_waiter&) = delete ;
You can’t perform that action at this time.
0 commit comments