func newFile()

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
}