Skip to content
This repository was archived by the owner on Dec 15, 2025. It is now read-only.

Commit 945d1aa

Browse files
committed
fix #140 uintptr will no lock the address from gc
1 parent 0ab8806 commit 945d1aa

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

feature_reflect_map.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func (decoder *mapDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
4848
}
4949
iter.ReadMapCB(func(iter *Iterator, keyStr string) bool {
5050
elem := reflect.New(decoder.elemType)
51-
decoder.elemDecoder.Decode(unsafe.Pointer(elem.Pointer()), iter)
51+
decoder.elemDecoder.Decode(extractInterface(elem.Interface()).word, iter)
5252
// to put into map, we have to use reflection
5353
keyType := decoder.keyType
5454
// TODO: remove this from loop

feature_reflect_slice.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,9 @@ func growOne(slice *sliceHeader, sliceType reflect.Type, elementType reflect.Typ
118118
}
119119
}
120120
}
121-
newVal := reflect.MakeSlice(sliceType, newLen, newCap)
122-
dst := unsafe.Pointer(newVal.Pointer())
121+
newVal := reflect.MakeSlice(sliceType, newLen, newCap).Interface()
122+
newValPtr := extractInterface(newVal).word
123+
dst := (*sliceHeader)(newValPtr).Data
123124
// copy old array into new array
124125
originalBytesCount := slice.Len * int(elementType.Size())
125126
srcSliceHeader := (unsafe.Pointer)(&sliceHeader{slice.Data, originalBytesCount, originalBytesCount})
@@ -134,8 +135,9 @@ func reuseSlice(slice *sliceHeader, sliceType reflect.Type, expectedCap int) {
134135
if expectedCap <= slice.Cap {
135136
return
136137
}
137-
newVal := reflect.MakeSlice(sliceType, 0, expectedCap)
138-
dst := unsafe.Pointer(newVal.Pointer())
138+
newVal := reflect.MakeSlice(sliceType, 0, expectedCap).Interface()
139+
newValPtr := extractInterface(newVal).word
140+
dst := (*sliceHeader)(newValPtr).Data
139141
slice.Data = dst
140142
slice.Cap = expectedCap
141143
}

0 commit comments

Comments
 (0)