mirror of
https://github.com/ClusterCockpit/cc-metric-store.git
synced 2024-11-10 05:07:25 +01:00
Fix mmap based allocator
This commit is contained in:
parent
a8bc250600
commit
9830f3c5d4
@ -18,6 +18,7 @@ var allocatorLock sync.Mutex
|
|||||||
var allocatorPool [][]byte
|
var allocatorPool [][]byte
|
||||||
|
|
||||||
func RequestBytes(size int) []byte {
|
func RequestBytes(size int) []byte {
|
||||||
|
requested := size
|
||||||
size = (size + bufferSizeInBytes - 1) / bufferSizeInBytes * bufferSizeInBytes
|
size = (size + bufferSizeInBytes - 1) / bufferSizeInBytes * bufferSizeInBytes
|
||||||
if size == bufferSizeInBytes {
|
if size == bufferSizeInBytes {
|
||||||
allocatorLock.Lock()
|
allocatorLock.Lock()
|
||||||
@ -31,16 +32,20 @@ func RequestBytes(size int) []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pagesize := os.Getpagesize()
|
pagesize := os.Getpagesize()
|
||||||
if size < pagesize || pagesize%size != 0 {
|
if size < pagesize || size%pagesize != 0 {
|
||||||
panic("page size and buffer size do not go with each other")
|
panic("page size and buffer size do not go with each other")
|
||||||
}
|
}
|
||||||
|
|
||||||
bytes, err := unix.Mmap(-1, 0, size, unix.PROT_READ|unix.PROT_WRITE, unix.MAP_ANONYMOUS)
|
bytes, err := unix.Mmap(-1, 0, size, unix.PROT_READ|unix.PROT_WRITE, unix.MAP_ANONYMOUS|unix.MAP_SHARED)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic("unix.Mmap failed: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
return bytes
|
if cap(bytes) != size {
|
||||||
|
panic("whoops?")
|
||||||
|
}
|
||||||
|
|
||||||
|
return bytes[:requested]
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReleaseBytes(bytes []byte) {
|
func ReleaseBytes(bytes []byte) {
|
||||||
|
Loading…
Reference in New Issue
Block a user