in file.go [192:233]
func newFile(
file vfs.File,
opts Options,
metaActive int,
maxSize, pageSize uint,
) (*File, reason) {
f := &File{
file: file,
path: file.Name(),
allocator: allocator{
maxSize: maxSize,
pageSize: pageSize,
},
observer: opts.Observer,
}
f.locks.init()
if err := f.mmap(); err != nil {
return nil, err
}
initOK := false
defer cleanup.IfNot(&initOK, ignoreReason(f.munmap))
if err := f.init(metaActive, opts); err != nil {
return nil, err
}
invariant.CheckNot(f.allocator.maxSize != 0 && f.allocator.maxPages == 0,
"page limit not configured on allocator")
// create asynchronous writer
f.writer.Init(file, f.allocator.pageSize, opts.Sync)
f.wg.Add(1)
go func() {
defer f.wg.Done()
f.writer.Run()
}()
initOK = true
return f, nil
}