X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/614145d096375ae18c7020e8f9205eaa2a1d0d39..f416c6e0370c78a9aa18c2e461e0861b404a669a:/sdk/go/arvados/fs_lookup.go diff --git a/sdk/go/arvados/fs_lookup.go b/sdk/go/arvados/fs_lookup.go index 56b5953234..471dc69c82 100644 --- a/sdk/go/arvados/fs_lookup.go +++ b/sdk/go/arvados/fs_lookup.go @@ -50,9 +50,11 @@ func (ln *lookupnode) Readdir() ([]os.FileInfo, error) { return nil, err } for _, child := range all { + ln.treenode.Lock() _, err = ln.treenode.Child(child.FileInfo().Name(), func(inode) (inode, error) { return child, nil }) + ln.treenode.Unlock() if err != nil { return nil, err } @@ -66,7 +68,7 @@ func (ln *lookupnode) Readdir() ([]os.FileInfo, error) { return ln.treenode.Readdir() } -// Child rejects (with ErrInvalidArgument) calls to add/replace +// Child rejects (with ErrInvalidOperation) calls to add/replace // children, instead calling loadOne when a non-existing child is // looked up. func (ln *lookupnode) Child(name string, replace func(inode) (inode, error)) (inode, error) { @@ -95,12 +97,12 @@ func (ln *lookupnode) Child(name string, replace func(inode) (inode, error)) (in if replace != nil { // Let the callback try to delete or replace the // existing node; if it does, return - // ErrInvalidArgument. + // ErrInvalidOperation. if tryRepl, err := replace(existing); err != nil { // Propagate error from callback return existing, err } else if tryRepl != existing { - return existing, ErrInvalidArgument + return existing, ErrInvalidOperation } } // Return original error from ln.treenode.Child() (it might be