package bbolt
import (
)
func ( *DB, bool, time.Duration) error {
var time.Time
if != 0 {
= time.Now()
}
:= .file.Fd()
:= syscall.LOCK_NB
if {
|= syscall.LOCK_EX
} else {
|= syscall.LOCK_SH
}
for {
:= syscall.Flock(int(), )
if == nil {
return nil
} else if != syscall.EWOULDBLOCK {
return
}
if != 0 && time.Since() > -flockRetryTimeout {
return ErrTimeout
}
time.Sleep(flockRetryTimeout)
}
}
func ( *DB) error {
return syscall.Flock(int(.file.Fd()), syscall.LOCK_UN)
}
func ( *DB, int) error {
, := syscall.Mmap(int(.file.Fd()), 0, , syscall.PROT_READ, syscall.MAP_SHARED|.MmapFlags)
if != nil {
return
}
= madvise(, syscall.MADV_RANDOM)
if != nil && != syscall.ENOSYS {
return fmt.Errorf("madvise: %s", )
}
.dataref =
.data = (*[maxMapSize]byte)(unsafe.Pointer(&[0]))
.datasz =
return nil
}
func ( *DB) error {
if .dataref == nil {
return nil
}
:= syscall.Munmap(.dataref)
.dataref = nil
.data = nil
.datasz = 0
return
}
func ( []byte, int) ( error) {
, , := syscall.Syscall(syscall.SYS_MADVISE, uintptr(unsafe.Pointer(&[0])), uintptr(len()), uintptr())
if != 0 {
=
}
return
}