diff options
author | 2021-12-22 19:05:39 -0800 | |
---|---|---|
committer | 2021-12-22 19:05:39 -0800 | |
commit | 2cfdf293645e50aa8a142a40cf2f1583611d0047 (patch) | |
tree | 3a064d687debcfbc6566b18ceeb275c4aefe1cfb /src/io/io_linux.zig | |
parent | 328534605f2c0620e7cc8370dc31d072f4633140 (diff) | |
download | bun-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.zig | 20 |
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 { |