#include <string.h>
+#ifndef WITHOUT_URING
#include <liburing.h>
+#endif
#include <stdint.h>
#include <unistd.h>
#include <memory>
IOUringEngine::IOUringEngine()
{
+#ifdef WITHOUT_URING
+ int ret = -1;
+#else
int ret = io_uring_queue_init(queue_depth, &ring, 0);
+#endif
using_uring = (ret >= 0);
}
return;
}
+#ifndef WITHOUT_URING
if (pending_reads < queue_depth) {
io_uring_sqe *sqe = io_uring_get_sqe(&ring);
if (sqe == nullptr) {
} else {
queued_reads.push(QueuedRead{ fd, len, offset, move(cb) });
}
+#endif
}
+#ifndef WITHOUT_URING
void IOUringEngine::submit_read_internal(io_uring_sqe *sqe, int fd, size_t len, off_t offset, function<void(string)> cb)
{
void *buf;
io_uring_sqe_set_data(sqe, pending);
++pending_reads;
}
+#endif
void IOUringEngine::finish()
{
return;
}
+#ifndef WITHOUT_URING
int ret = io_uring_submit(&ring);
if (ret < 0) {
fprintf(stderr, "io_uring_submit: %s\n", strerror(-ret));
}
}
}
+#endif
}
void complete_pread(int fd, void *ptr, size_t len, off_t offset)