From: Ludi Rehak Date: Mon, 8 Aug 2022 21:13:52 +0000 (-0700) Subject: encoding/gob: change typeInfo.encoder type to atomic.Pointer[T] X-Git-Tag: go1.20rc1~1722 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d39b54171a2702d5fe6fc427b60ee03c9c45da5a;p=gostls13.git encoding/gob: change typeInfo.encoder type to atomic.Pointer[T] Replace loading and storing an atomic.Value of type pointer with atomic.Pointer. Change-Id: I018ac1e18eee4f203ebca65c2833daf991075371 Reviewed-on: https://go-review.googlesource.com/c/go/+/422174 Reviewed-by: Than McIntosh Reviewed-by: Dmitri Shuralyov Reviewed-by: Rob Pike TryBot-Result: Gopher Robot Run-TryBot: Rob Pike --- diff --git a/src/encoding/gob/encode.go b/src/encoding/gob/encode.go index 548d614f52..38430342b6 100644 --- a/src/encoding/gob/encode.go +++ b/src/encoding/gob/encode.go @@ -577,7 +577,7 @@ func encOpFor(rt reflect.Type, inProgress map[reflect.Type]*encOp, building map[ op = func(i *encInstr, state *encoderState, sv reflect.Value) { state.update(i) // indirect through info to delay evaluation for recursive structs - enc := info.encoder.Load().(*encEngine) + enc := info.encoder.Load() state.enc.encodeStruct(state.b, enc, sv) } case reflect.Interface: @@ -661,8 +661,8 @@ func getEncEngine(ut *userTypeInfo, building map[*typeInfo]bool) *encEngine { if err != nil { error_(err) } - enc, ok := info.encoder.Load().(*encEngine) - if !ok { + enc := info.encoder.Load() + if enc == nil { enc = buildEncEngine(info, ut, building) } return enc @@ -675,8 +675,8 @@ func buildEncEngine(info *typeInfo, ut *userTypeInfo, building map[*typeInfo]boo } info.encInit.Lock() defer info.encInit.Unlock() - enc, ok := info.encoder.Load().(*encEngine) - if !ok { + enc := info.encoder.Load() + if enc == nil { if building == nil { building = make(map[*typeInfo]bool) } diff --git a/src/encoding/gob/type.go b/src/encoding/gob/type.go index 6e2c724232..9eec08615e 100644 --- a/src/encoding/gob/type.go +++ b/src/encoding/gob/type.go @@ -672,8 +672,8 @@ func (w *wireType) string() string { type typeInfo struct { id typeId - encInit sync.Mutex // protects creation of encoder - encoder atomic.Value // *encEngine + encInit sync.Mutex // protects creation of encoder + encoder atomic.Pointer[encEngine] wire *wireType }