diff options
author | Jens Axboe <axboe@kernel.dk> | 2019-12-16 12:10:07 -0700 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2019-12-16 12:10:07 -0700 |
commit | 8ce3a0765bc7670c97c90e39c92c61217754e58d (patch) | |
tree | 35bb08f8455c121854c0164e1afd9f4851508c44 | |
parent | afa25d596d360bec0f417a11ab611776f8cec0bc (diff) | |
download | liburing-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.c | 8 |
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; } |