yggdrasil-go/src/yggdrasil/util.go

58 lines
923 B
Go
Raw Normal View History

2017-12-29 04:16:20 +00:00
package yggdrasil
// These are misc. utility functions that didn't really fit anywhere else
import "runtime"
2018-01-04 22:37:51 +00:00
2017-12-29 04:16:20 +00:00
//import "sync"
func util_yield() {
2018-01-04 22:37:51 +00:00
runtime.Gosched()
2017-12-29 04:16:20 +00:00
}
func util_lockthread() {
2018-01-04 22:37:51 +00:00
runtime.LockOSThread()
2017-12-29 04:16:20 +00:00
}
func util_unlockthread() {
2018-01-04 22:37:51 +00:00
runtime.UnlockOSThread()
2017-12-29 04:16:20 +00:00
}
/* Used previously, but removed because casting to an interface{} allocates...
2017-12-29 04:16:20 +00:00
var byteStore sync.Pool = sync.Pool{
New: func () interface{} { return []byte(nil) },
}
func util_getBytes() []byte {
return byteStore.Get().([]byte)[:0]
}
func util_putBytes(bs []byte) {
byteStore.Put(bs) // This is the part that allocates
2017-12-29 04:16:20 +00:00
}
*/
var byteStore chan []byte
func util_initByteStore() {
2018-01-04 22:37:51 +00:00
if byteStore == nil {
byteStore = make(chan []byte, 32)
}
2017-12-29 04:16:20 +00:00
}
func util_getBytes() []byte {
2018-01-04 22:37:51 +00:00
select {
case bs := <-byteStore:
return bs[:0]
default:
return nil
}
2017-12-29 04:16:20 +00:00
}
func util_putBytes(bs []byte) {
2018-01-04 22:37:51 +00:00
select {
case byteStore <- bs:
default:
}
2017-12-29 04:16:20 +00:00
}