diff options
author | Jens Axboe <axboe@kernel.dk> | 2024-04-20 16:41:06 -0600 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2024-04-20 16:41:06 -0600 |
commit | c18c8fbcdfbd4ab785cf75bf22a0f9498cedd077 (patch) | |
tree | 9cd3ba4ca0791dca10c787130b6390e95b05bdd3 | |
parent | bd527a50ed5f49d4bedf7540c12319ba18e5eac3 (diff) | |
download | liburing-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.c | 6 |
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); } |