in lib/store/base/file_op.go [155:188]
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
switch l {
case _lockLevelPeek:
loaded = op.s.fileMap.LoadForPeek(name, func(name string, entry FileEntry) {
if err = op.verifyStateHelper(name, entry); err != nil {
return
}
f(name, entry)
})
case _lockLevelRead:
loaded = op.s.fileMap.LoadForRead(name, func(name string, entry FileEntry) {
if err = op.verifyStateHelper(name, entry); err != nil {
return
}
f(name, entry)
})
case _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
}