mirror of
https://github.com/metabarcoding/obitools4.git
synced 2025-12-09 01:00:26 +00:00
Patch memory error related to []byte pool
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package obiseq
|
||||
|
||||
import (
|
||||
"log"
|
||||
"sync"
|
||||
|
||||
"git.metabarcoding.org/lecasofts/go/obitools/pkg/goutils"
|
||||
@@ -14,22 +15,36 @@ var _BioSequenceByteSlicePool = sync.Pool{
|
||||
}
|
||||
|
||||
func RecycleSlice(s *[]byte) {
|
||||
if s != nil && *s != nil {
|
||||
if s != nil && cap(*s) > 0 {
|
||||
*s = (*s)[:0]
|
||||
if cap(*s) == 0 {
|
||||
log.Panicln("trying to store a NIL slice in the pool", s == nil, *s == nil, cap(*s))
|
||||
}
|
||||
_BioSequenceByteSlicePool.Put(s)
|
||||
}
|
||||
}
|
||||
|
||||
func GetSlice(values ...byte) []byte {
|
||||
s := *(_BioSequenceByteSlicePool.Get().(*[]byte))
|
||||
// It returns a slice of bytes from a pool of slices.
|
||||
//
|
||||
// the slice can be prefilled with the provided values
|
||||
func GetSlice(capacity int) []byte {
|
||||
p := _BioSequenceByteSlicePool.Get().(*[]byte)
|
||||
|
||||
if len(values) > 0 {
|
||||
s = append(s, values...)
|
||||
if p == nil || *p == nil || cap(*p) < capacity {
|
||||
s := make([]byte, 0, capacity)
|
||||
p = &s
|
||||
}
|
||||
s := *p
|
||||
|
||||
return s
|
||||
}
|
||||
|
||||
func CopySlice(src []byte) []byte {
|
||||
sl := GetSlice(len(src))
|
||||
copy(sl,src)
|
||||
return sl
|
||||
}
|
||||
|
||||
var BioSequenceAnnotationPool = sync.Pool{
|
||||
New: func() interface{} {
|
||||
bs := make(Annotation, 5)
|
||||
|
||||
Reference in New Issue
Block a user