diff options
author | 2021-09-02 19:25:32 -0700 | |
---|---|---|
committer | 2021-09-02 19:25:32 -0700 | |
commit | 54a7c4290a3112226a83f8c9cccc1433dd8d282e (patch) | |
tree | 83a331d83f5ad2733506db0f9317d160f441970d /src | |
parent | 4debcdcbbbd994e989694242a4c32201514b1de2 (diff) | |
download | bun-54a7c4290a3112226a83f8c9cccc1433dd8d282e.tar.gz bun-54a7c4290a3112226a83f8c9cccc1433dd8d282e.tar.zst bun-54a7c4290a3112226a83f8c9cccc1433dd8d282e.zip |
More defensive file handle reuse
Former-commit-id: 5bb38e0bc75a600d9c1b744990d9e4a1b66edf42
Diffstat (limited to 'src')
-rw-r--r-- | src/cache.zig | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/cache.zig b/src/cache.zig index ccf626ee8..840cd7357 100644 --- a/src/cache.zig +++ b/src/cache.zig @@ -179,7 +179,19 @@ pub fn NewCache(comptime cache_files: bool) type { if (_file_handle == null) { if (FeatureFlags.store_file_descriptors and dirname_fd > 0) { - file_handle = try std.fs.Dir.openFile(std.fs.Dir{ .fd = dirname_fd }, std.fs.path.basename(path), .{ .read = true }); + file_handle = std.fs.Dir.openFile(std.fs.Dir{ .fd = dirname_fd }, std.fs.path.basename(path), .{ .read = true }) catch |err| brk: { + switch (err) { + error.FileNotFound => { + const handle = try std.fs.openFileAbsolute(path, .{ .read = true }); + Output.prettyErrorln( + "<r><d>Internal error: directory mismatch for directory \"{s}\", fd {d}<r>. You don't need to do anything, but this indicates a bug.", + .{ path, dirname_fd }, + ); + break :brk handle; + }, + else => return err, + } + }; } else { file_handle = try std.fs.openFileAbsolute(path, .{ .read = true }); } |