lib9p

Go 9P library.
Log | Files | Refs | LICENSE

commit af0517689263700007cacd14904722421bad73ad
parent 610a478acca2c1ad93ea0996603c35e9cb332732
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Sat, 16 Nov 2024 18:05:45 +0900

update diskfs/qid_windows.go

Diffstat:
Mdiskfs/qid_windows.go | 18+++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/diskfs/qid_windows.go b/diskfs/qid_windows.go @@ -7,6 +7,7 @@ import ( "io/fs" "os" "path/filepath" + "sync" "time" "git.mtkn.jp/lib9p" @@ -25,6 +26,7 @@ type qidRec struct { // QidPool is the list of Qids in the file system. type QidPool struct { + *sync.Mutex m map[fileID]*qidRec nextQid uint64 } @@ -42,7 +44,9 @@ func idFromInfo(path string, info fs.FileInfo) fileID { // newQidPool allocates a QidPool. func newQidPool() *QidPool { return &QidPool{ - m: make(map[fileID]*qidRec), + new(sync.Mutex), + make(map[fileID]*qidRec), + 0, } } @@ -66,6 +70,8 @@ func (pool *QidPool) lookup(f *File) (lib9p.Qid, bool) { // It also checks if the file is modified after the last access by // comparing the qidReq.mtime and mtime, and update Qid.Vers if needed. func (pool *QidPool) lookupID(id fileID, mtime time.Time) (lib9p.Qid, bool) { + pool.Lock() + defer pool.Unlock() qrec, ok := pool.m[id] if !ok { return lib9p.Qid{}, false @@ -98,6 +104,8 @@ func (pool *QidPool) addID(id fileID, info fs.FileInfo) (lib9p.Qid, error) { Path: pool.nextQid, Type: qtype, } + pool.Lock() + defer pool.Unlock() pool.m[id] = &qidRec{qid: qid, mtime: info.ModTime()} pool.nextQid++ return *qid, nil @@ -109,5 +117,13 @@ func (pool *QidPool) delete(f *File) { if err != nil { return } + pool.Lock() + defer pool.Unlock() + delete(pool.m, id) +} + +func (pool *QidPool) deleteID(id fileID) { + pool.Lock() + defer pool.Unlock() delete(pool.m, id) }