aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2024-04-20 16:41:06 -0600
committerJens Axboe <axboe@kernel.dk>2024-04-20 16:41:06 -0600
commitc18c8fbcdfbd4ab785cf75bf22a0f9498cedd077 (patch)
tree9cd3ba4ca0791dca10c787130b6390e95b05bdd3
parentbd527a50ed5f49d4bedf7540c12319ba18e5eac3 (diff)
downloadliburing-c18c8fbcdfbd4ab785cf75bf22a0f9498cedd077.tar.gz
examples/proxy: re-arm receive if no new send is prepared
We should re-arm the receive if we get -ENOBUFS for a receive even if there's no send pending, as we may not actually prepare a send. Check the return value of prep_next_send() to help make that call. Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--examples/proxy.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/examples/proxy.c b/examples/proxy.c
index d1260906..53324566 100644
--- a/examples/proxy.c
+++ b/examples/proxy.c
@@ -713,8 +713,12 @@ static void recv_enobufs(struct io_uring *ring, struct conn *c,
* kick the recv rearm.
*/
if (!is_sink) {
+ int do_recv_arm = 1;
+
if (!cd->pending_send)
- prep_next_send(ring, c, cd, fd);
+ do_recv_arm = !prep_next_send(ring, c, cd, fd);
+ if (do_recv_arm)
+ __submit_receive(ring, c, &c->cd[0], c->in_fd);
} else {
__submit_receive(ring, c, &c->cd[0], c->in_fd);
}