diff options
| author | Ludi Rehak <ludi317@gmail.com> | 2022-08-08 14:13:52 -0700 |
|---|---|---|
| committer | Rob Pike <r@golang.org> | 2022-08-09 21:26:45 +0000 |
| commit | d39b54171a2702d5fe6fc427b60ee03c9c45da5a (patch) | |
| tree | d25f6fcd86c833b6ae5418c9a60d2fd2b595a8e6 /src/encoding | |
| parent | cd9cd925bb9ed79975f2531a6b84f69905e4fc31 (diff) | |
| download | go-d39b54171a2702d5fe6fc427b60ee03c9c45da5a.tar.xz | |
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 <thanm@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Rob Pike <r@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Rob Pike <r@golang.org>
Diffstat (limited to 'src/encoding')
| -rw-r--r-- | src/encoding/gob/encode.go | 10 | ||||
| -rw-r--r-- | src/encoding/gob/type.go | 4 |
2 files changed, 7 insertions, 7 deletions
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 } |
