File tree 1 file changed +8
-2
lines changed
1 file changed +8
-2
lines changed Original file line number Diff line number Diff line change 6
6
| |
7
7
| io/struct_decoder.go |
8
8
| |
9
- | LastModified: Mar 5, 2022 |
9
+ | LastModified: Dec 13, 2023 |
10
10
| Author: Ma Bingyao <[email protected] > |
11
11
| |
12
12
\*________________________________________________________*/
@@ -67,10 +67,14 @@ func (dec *Decoder) ReadObject() interface{} {
67
67
type structDecoder struct {
68
68
t * reflect2.UnsafeStructType
69
69
fields map [string ]FieldAccessor
70
+ sync.RWMutex
70
71
}
71
72
72
73
func (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 {
74
78
field .Decode (dec , field .Type .Type1 (), field .Field .UnsafeGet (ptr ))
75
79
} else {
76
80
var v interface {}
@@ -130,6 +134,8 @@ func getNamedStructDecoder(t reflect.Type) ValueDecoder {
130
134
func newNamedStructDecoder (t reflect.Type , tag ... string ) * structDecoder {
131
135
t2 := reflect2 .Type2 (t ).(* reflect2.UnsafeStructType )
132
136
decoder := & structDecoder {t : t2 }
137
+ decoder .Lock ()
138
+ defer decoder .Unlock ()
133
139
registerNamedStructDecoder (t , decoder )
134
140
decoder .fields = getFieldMap (t , tag ... )
135
141
return decoder
You can’t perform that action at this time.
0 commit comments