22class ThreadLocalRing :
public ThreadLocalSingleton<ThreadLocalRing> {
24 Ring *ring() {
return &ring_; }
26 ThreadLocalRing() : ring_(create_ring_()) {}
30 static Ring create_ring_() noexcept {
31 io_uring_params params = {};
32 params.flags |= IORING_SETUP_CLAMP;
33 params.flags |= IORING_SETUP_SINGLE_ISSUER;
34 params.flags |= IORING_SETUP_SUBMIT_ALL;
37 return Ring(8, ¶ms,
nullptr, 0, std::numeric_limits<size_t>::max());
44inline int sync_msg_ring(io_uring_sqe *sqe_data)
noexcept {
45#if CONDY_URING_VERSION_GE(2, 12)
46 return io_uring_register_sync_msg(sqe_data);
48 auto *ring = ThreadLocalRing::current().ring();
49 auto *sqe = ring->get_sqe();
53 ring->reap_completions_wait([&](io_uring_cqe *cqe) { r = cqe->res; });
55 return static_cast<int>(n);
62class OpFinishHandleBase {
64 using HandleFunc = bool (*)(
void *, io_uring_cqe *)
noexcept;
66 bool handle(io_uring_cqe *cqe)
noexcept {
67 assert(handle_func_ !=
nullptr);
68 return handle_func_(
this, cqe);
72 OpFinishHandleBase() =
default;
75 HandleFunc handle_func_ =
nullptr;
The main namespace for the Condy library.
Wrapper classes for liburing interfaces.