aboutsummaryrefslogtreecommitdiff
path: root/src/io/io_linux.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-12-22 19:05:39 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-12-22 19:05:39 -0800
commit2cfdf293645e50aa8a142a40cf2f1583611d0047 (patch)
tree3a064d687debcfbc6566b18ceeb275c4aefe1cfb /src/io/io_linux.zig
parent328534605f2c0620e7cc8370dc31d072f4633140 (diff)
downloadbun-2cfdf293645e50aa8a142a40cf2f1583611d0047.tar.gz
bun-2cfdf293645e50aa8a142a40cf2f1583611d0047.tar.zst
bun-2cfdf293645e50aa8a142a40cf2f1583611d0047.zip
Fix error from requesting too much from io_uring
Diffstat (limited to 'src/io/io_linux.zig')
-rw-r--r--src/io/io_linux.zig20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/io/io_linux.zig b/src/io/io_linux.zig
index f69f70c5b..b22dc92a5 100644
--- a/src/io/io_linux.zig
+++ b/src/io/io_linux.zig
@@ -62,8 +62,24 @@ unqueued: FIFO(Completion) = .{},
/// Completions that are ready to have their callbacks run.
completed: FIFO(Completion) = .{},
-pub fn init(entries: u12, flags: u32) !IO {
- return IO{ .ring = try IO_Uring.init(entries, flags) };
+pub fn init(entries_: u12, flags: u32) !IO {
+ var ring: IO_Uring = undefined;
+ var entries = entries_;
+ while (true) {
+ ring = IO_Uring.init(entries, flags) catch |err| {
+ if (err == error.SystemResources) {
+ if (entries < 4) return error.SystemResources;
+ entries /= 2;
+ continue;
+ }
+
+ return err;
+ };
+ break;
+ }
+
+
+ return IO{ .ring = ring };
}
pub fn deinit(self: *IO) void {