io/uring/Ring: add ctor wrapping io_uring_queue_init_params()

This commit is contained in:
Max Kellermann 2025-01-20 21:10:11 +01:00 committed by Max Kellermann
parent badf7101e2
commit c644b7616a
4 changed files with 23 additions and 0 deletions

@ -15,6 +15,11 @@ Queue::Queue(unsigned entries, unsigned flags)
{
}
Queue::Queue(unsigned entries, struct io_uring_params &params)
:ring(entries, params)
{
}
Queue::~Queue() noexcept
{
operations.clear_and_dispose(DeleteDisposer{});

@ -23,6 +23,7 @@ class Queue {
public:
Queue(unsigned entries, unsigned flags);
Queue(unsigned entries, struct io_uring_params &params);
~Queue() noexcept;
FileDescriptor GetFileDescriptor() const noexcept {

@ -14,6 +14,13 @@ Ring::Ring(unsigned entries, unsigned flags)
throw MakeErrno(-error, "io_uring_queue_init() failed");
}
Ring::Ring(unsigned entries, struct io_uring_params &params)
{
if (int error = io_uring_queue_init_params(entries, &ring, &params);
error < 0)
throw MakeErrno(-error, "io_uring_queue_init_params() failed");
}
void
Ring::Submit()
{

@ -26,6 +26,16 @@ public:
*/
Ring(unsigned entries, unsigned flags);
/**
* Construct the io_uring using io_uring_queue_init().
*
* Throws on error.
*
* @param params initialization parameters; will also be
* written to by this constructor
*/
Ring(unsigned entries, struct io_uring_params &params);
~Ring() noexcept {
io_uring_queue_exit(&ring);
}