authorgravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2026-06-23 22:06:17-04:00
committergravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2026-06-23 22:06:17-04:00
log594b3faaa34f6f464a5c543489cf57fb89070999
treeeb66ef9d352da6c5eca287fbaf5258e89d3e6a22
parentd94b3e7691f15b8bc6993cc6999d0f439255ed80

MappedFile: explicitly write the mtime when flushing, as mapped file writes don't do this automatically on windows


1 files changed, 7 insertions(+), 1 deletions(-)

src/link/MappedFile.zig+7-1
...@@ -1314,11 +1314,12 @@ pub fn unmap(mf: *MappedFile) void {...@@ -1314,11 +1314,12 @@ pub fn unmap(mf: *MappedFile) void {
1314}1314}
13151315
1316pub fn flush(mf: *MappedFile) (Io.Cancelable || error{MappedFileIo})!void {1316pub fn flush(mf: *MappedFile) (Io.Cancelable || error{MappedFileIo})!void {
1317 mf.memory_map.write(mf.io) catch |err| switch (err) {1317 mf.flushInner() catch |err| switch (err) {
1318 error.Canceled => |e| return e,1318 error.Canceled => |e| return e,
13191319
1320 error.WouldBlock, // file was not opened as non-blocking1320 error.WouldBlock, // file was not opened as non-blocking
1321 error.NotOpenForWriting, // we definitely opened the file for writing1321 error.NotOpenForWriting, // we definitely opened the file for writing
1322 error.ReadOnlyFileSystem,
1322 => {1323 => {
1323 mf.io_err = error.Unexpected;1324 mf.io_err = error.Unexpected;
1324 return error.MappedFileIo;1325 return error.MappedFileIo;
...@@ -1331,6 +1332,11 @@ pub fn flush(mf: *MappedFile) (Io.Cancelable || error{MappedFileIo})!void {...@@ -1331,6 +1332,11 @@ pub fn flush(mf: *MappedFile) (Io.Cancelable || error{MappedFileIo})!void {
1331 };1332 };
1332}1333}
13331334
1335fn flushInner(mf: *MappedFile) (Io.File.WritePositionalError || Io.File.SetTimestampsError)!void {
1336 try mf.memory_map.write(mf.io);
1337 if (is_windows) try mf.memory_map.file.setTimestampsNow(mf.io);
1338}
1339
1334fn verify(mf: *MappedFile) void {1340fn verify(mf: *MappedFile) void {
1335 const root = Node.Index.root.get(mf);1341 const root = Node.Index.root.get(mf);
1336 assert(root.parent == .none);1342 assert(root.parent == .none);