in lib/store/base/file_op.go [155:187]
func (op *localFileOp) lockHelper(
name string, l lockLevel, f func(name string, entry FileEntry)) (err error) {
if _, err = op.reloadFileEntryHelper(name); err != nil {
return err
}
var loaded bool
if l == _lockLevelPeek {
loaded = op.s.fileMap.LoadForPeek(name, func(name string, entry FileEntry) {
if err = op.verifyStateHelper(name, entry); err != nil {
return
}
f(name, entry)
})
} else if l == _lockLevelRead {
loaded = op.s.fileMap.LoadForRead(name, func(name string, entry FileEntry) {
if err = op.verifyStateHelper(name, entry); err != nil {
return
}
f(name, entry)
})
} else if l == _lockLevelWrite {
loaded = op.s.fileMap.LoadForWrite(name, func(name string, entry FileEntry) {
if err = op.verifyStateHelper(name, entry); err != nil {
return
}
f(name, entry)
})
}
if !loaded {
return os.ErrNotExist
}
return err
}