From fcfe1c4317aafc5bd1b822a908f8f13e231a392d Mon Sep 17 00:00:00 2001 From: Yi Duan Date: Fri, 31 Dec 2021 17:15:35 +0800 Subject: [PATCH] fix:(encoder) keep arguement `buf` alive (#166) --- decoder/pools.go | 2 -- encoder/encoder.go | 1 + encoder/pools.go | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/decoder/pools.go b/decoder/pools.go index 418a274..a2e6db6 100644 --- a/decoder/pools.go +++ b/decoder/pools.go @@ -84,7 +84,6 @@ var _KeepAlive struct { var errCallShadow = errors.New("DON'T CALL THIS!") -//go:nosplit // Faker func of _Decoder, used to export its stackmap as _Decoder's func _Decoder_Shadow(s string, i int, vp unsafe.Pointer, sb *_Stack, fv uint64, sv string, vk unsafe.Pointer) (ret int, err error) { // align to assembler_amd64.go: _FP_offs @@ -105,7 +104,6 @@ func _Decoder_Shadow(s string, i int, vp unsafe.Pointer, sb *_Stack, fv uint64, return 0, errCallShadow } -//go:nosplit // Faker func of _Decoder_Generic, used to export its stackmap func _Decoder_Generic_Shadow(sb *_Stack) { // align to generic_amd64.go: _VD_offs diff --git a/encoder/encoder.go b/encoder/encoder.go index e0675fb..7b0bf6d 100644 --- a/encoder/encoder.go +++ b/encoder/encoder.go @@ -109,6 +109,7 @@ func EncodeInto(buf *[]byte, val interface{}, opts Options) error { freeStack(stk) /* avoid GC ahead */ + runtime.KeepAlive(buf) runtime.KeepAlive(efv) return err } diff --git a/encoder/pools.go b/encoder/pools.go index 433dd96..aedb161 100644 --- a/encoder/pools.go +++ b/encoder/pools.go @@ -71,7 +71,6 @@ var _KeepAlive struct { var errCallShadow = errors.New("DON'T CALL THIS!") // Faker func of _Encoder, used to export its stackmap as _Encoder's -//go:nosplit func _Encoder_Shadow(rb *[]byte, vp unsafe.Pointer, sb *_Stack, fv uint64) (err error) { // align to assembler_amd64.go: _FP_offs var frame [_FP_offs]byte