aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-09-02 19:25:32 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-09-02 19:25:32 -0700
commit54a7c4290a3112226a83f8c9cccc1433dd8d282e (patch)
tree83a331d83f5ad2733506db0f9317d160f441970d /src
parent4debcdcbbbd994e989694242a4c32201514b1de2 (diff)
downloadbun-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.zig14
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 });
}