commit fa270be7d0b626e8c234971a89d2d8930ab66114
parent e4f2b619a7de1b1fa1a23b38290b75822a6152a8
Author: Matsuda Kenji <info@mtkn.jp>
Date: Sun, 17 Dec 2023 08:46:39 +0900
close children after reading stat in sRead
Diffstat:
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/diskfs/stat_unix.go b/diskfs/stat_unix.go
@@ -34,6 +34,7 @@ func fiStat(pool *QidPool, id fileID, info fs.FileInfo) *lib9p.Stat {
}
group, err := user.LookupGroupId(strconv.Itoa(int(stat.Gid)))
if err != nil {
+ // BUG: in OpenBSD, "user: lookup groupid 1000: too many open files"
panic(fmt.Errorf("group: %v", err))
}
diff --git a/server.go b/server.go
@@ -587,7 +587,6 @@ func sRead(ctx context.Context, s *Server, r *Req) {
if err != nil {
log.Printf("get children: %v", err)
}
-
if ifcall.Offset != 0 && ifcall.Offset != r.Fid.dirOffset {
Respond(ctx, r, fmt.Errorf("invalid dir offset"))
return
@@ -606,6 +605,9 @@ func sRead(ctx context.Context, s *Server, r *Req) {
log.Printf("stat: %v", err)
continue
}
+ if err := children[k].Close(); err != nil {
+ log.Printf("close children: %v", err)
+ }
st := fi.Sys().(*Stat)
buf := st.marshal()
if n+len(buf) > len(data) {