diff --git a/fs/serve.go b/fs/serve.go index de9eb26c..a4c80a59 100644 --- a/fs/serve.go +++ b/fs/serve.go @@ -460,6 +460,7 @@ type Server struct { meta sync.Mutex req map[fuse.RequestID]func() // map request to cancel functions node []*serveNode + nodeRefLock sync.Mutex nodeRef map[Node]fuse.NodeID inode2idLock sync.Mutex inode2id map[uint64]fuse.NodeID @@ -1716,6 +1717,8 @@ func (s *Server) getNodeId(node Node) (id fuse.NodeID, ok bool) { s.inode2idLock.Unlock() return } + s.nodeRefLock.Lock() + defer s.nodeRefLock.Unlock() id, ok = s.nodeRef[node] return } @@ -1726,6 +1729,8 @@ func (s *Server) setNodeId(node Node, id fuse.NodeID) { s.inode2idLock.Unlock() return } + s.nodeRefLock.Lock() + defer s.nodeRefLock.Unlock() s.nodeRef[node] = id } func (s *Server) delNodeId(node Node) { @@ -1735,6 +1740,8 @@ func (s *Server) delNodeId(node Node) { s.inode2idLock.Unlock() return } + s.nodeRefLock.Lock() + defer s.nodeRefLock.Unlock() delete(s.nodeRef, node) }