ww: driver/coordinator robustness — dirent errors, EINTR, block comments
Three same-cluster robustness holes. enumeratedir treated a failed getdents64 (r<0) as EOF: a mid-walk error silently truncated the package source list, and a first-read error was misdiagnosed as "directory contains no WW package sources" -- it now routes the caller's "cannot read directory" arm. run_test_bin's waitpid had no EINTR retry and its return was unchecked, so an interrupted wait left status==0 and reported a false test PASS (the do_run twin already retried). The coordinator's pkgskipspace now also skips /* */ before the package clause like the driver's sep_skip_space -- a source opening with a block comment built under ww but failed coordinator discovery.
This commit is contained in:
@@ -469,6 +469,14 @@ fn enumeratedir(dirpath: *u8) (**u8, i32) = {
|
||||
r = os.getdents64(fd, buf.ptr, 8192u64);
|
||||
};
|
||||
os.close(fd);
|
||||
// A failed directory read is an ERROR, not EOF: mid-walk it
|
||||
// silently truncated the package source list, and on the first
|
||||
// read it was misdiagnosed as "directory contains no WW package
|
||||
// sources". -1 routes the caller's "cannot read directory" arm
|
||||
// (the cstage caller mapping).
|
||||
if (r < 0i64) {
|
||||
return nil: **u8, -1;
|
||||
};
|
||||
|
||||
// Insertion sort, byte-wise. n is small (≤16 in practice).
|
||||
let i: i32 = 1;
|
||||
|
||||
Reference in New Issue
Block a user