File tree Expand file tree Collapse file tree 1 file changed +8
-2
lines changed Expand file tree Collapse file tree 1 file changed +8
-2
lines changed Original file line number Diff line number Diff line change 66| |
77| io/struct_decoder.go |
88| |
9- | LastModified: Mar 5, 2022 |
9+ | LastModified: Dec 13, 2023 |
1010| Author: Ma Bingyao <[email protected] > | 1111| |
1212\*________________________________________________________*/
@@ -67,10 +67,14 @@ func (dec *Decoder) ReadObject() interface{} {
6767type structDecoder struct {
6868 t * reflect2.UnsafeStructType
6969 fields map [string ]FieldAccessor
70+ sync.RWMutex
7071}
7172
7273func (valdec * structDecoder ) decodeField (dec * Decoder , ptr unsafe.Pointer , name string ) {
73- if field , ok := valdec .fields [name ]; ok {
74+ valdec .RLock ()
75+ field , ok := valdec .fields [name ]
76+ valdec .RUnlock ()
77+ if ok {
7478 field .Decode (dec , field .Type .Type1 (), field .Field .UnsafeGet (ptr ))
7579 } else {
7680 var v interface {}
@@ -130,6 +134,8 @@ func getNamedStructDecoder(t reflect.Type) ValueDecoder {
130134func newNamedStructDecoder (t reflect.Type , tag ... string ) * structDecoder {
131135 t2 := reflect2 .Type2 (t ).(* reflect2.UnsafeStructType )
132136 decoder := & structDecoder {t : t2 }
137+ decoder .Lock ()
138+ defer decoder .Unlock ()
133139 registerNamedStructDecoder (t , decoder )
134140 decoder .fields = getFieldMap (t , tag ... )
135141 return decoder
You can’t perform that action at this time.
0 commit comments