summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2019-12-16 12:10:07 -0700
committerJens Axboe <axboe@kernel.dk>2019-12-16 12:10:07 -0700
commit8ce3a0765bc7670c97c90e39c92c61217754e58d (patch)
tree35bb08f8455c121854c0164e1afd9f4851508c44
parentafa25d596d360bec0f417a11ab611776f8cec0bc (diff)
downloadliburing-8ce3a0765bc7670c97c90e39c92c61217754e58d.tar.gz
liburing-8ce3a0765bc7670c97c90e39c92c61217754e58d.tar.bz2
__io_uring_get_cqe: use internal stable pointer for cqe
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--src/queue.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/queue.c b/src/queue.c
index e6cad37..31dc479 100644
--- a/src/queue.c
+++ b/src/queue.c
@@ -33,15 +33,16 @@ static inline bool sq_ring_needs_enter(struct io_uring *ring, unsigned *flags)
int __io_uring_get_cqe(struct io_uring *ring, struct io_uring_cqe **cqe_ptr,
unsigned submit, unsigned wait_nr, sigset_t *sigmask)
{
+ struct io_uring_cqe *cqe = NULL;
int ret = 0, err;
do {
unsigned flags = 0;
- err = __io_uring_peek_cqe(ring, cqe_ptr);
+ err = __io_uring_peek_cqe(ring, &cqe);
if (err)
break;
- if (!*cqe_ptr && !wait_nr && !submit) {
+ if (!cqe && !wait_nr && !submit) {
err = -EAGAIN;
break;
}
@@ -55,10 +56,11 @@ int __io_uring_get_cqe(struct io_uring *ring, struct io_uring_cqe **cqe_ptr,
if (ret < 0)
err = -errno;
submit -= ret;
- if (*cqe_ptr)
+ if (cqe)
break;
} while (!err);
+ *cqe_ptr = cqe;
return err;
}