Skip to content

Commit db78abf

Browse files
samuel-williams-shopifyioquatix
authored andcommitted
Don't access freed completion.
1 parent a3d25c1 commit db78abf

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

ext/io/event/selector/uring.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1101,13 +1101,19 @@ unsigned select_process_completions(struct IO_Event_Selector_URing *selector) {
11011101
}
11021102

11031103
io_uring_cq_advance(ring, 1);
1104-
// This marks the waiting operation as "complete":
1105-
IO_Event_Selector_URing_Completion_release(selector, completion);
11061104

1105+
VALUE fiber = 0;
11071106
if (waiting && waiting->fiber) {
11081107
assert(waiting->result != -ECANCELED);
11091108

1110-
IO_Event_Selector_loop_resume(&selector->backend, waiting->fiber, 0, NULL);
1109+
fiber = waiting->fiber;
1110+
}
1111+
1112+
// This marks the waiting operation as "complete":
1113+
IO_Event_Selector_URing_Completion_release(selector, completion);
1114+
1115+
if (fiber) {
1116+
IO_Event_Selector_loop_resume(&selector->backend, fiber, 0, NULL);
11111117
}
11121118
}
11131119

0 commit comments

Comments
 (0)