runtime: zero map key/value on deletion to so GC doesn't see them
Этот коммит содержится в:
родитель
5fee3428bc
коммит
cb9c6f0074
1 изменённых файлов: 5 добавлений и 0 удалений
|
@ -342,6 +342,11 @@ func hashmapDelete(m *hashmap, key unsafe.Pointer, hash uint32) {
|
||||||
if m.keyEqual(key, slotKey, m.keySize) {
|
if m.keyEqual(key, slotKey, m.keySize) {
|
||||||
// Found the key, delete it.
|
// Found the key, delete it.
|
||||||
bucket.tophash[i] = 0
|
bucket.tophash[i] = 0
|
||||||
|
// Zero out the key and value so garbage collector doesn't pin the allocations.
|
||||||
|
memzero(slotKey, m.keySize)
|
||||||
|
slotValueOffset := unsafe.Sizeof(hashmapBucket{}) + m.keySize*8 + m.valueSize*uintptr(i)
|
||||||
|
slotValue := unsafe.Add(unsafe.Pointer(bucket), slotValueOffset)
|
||||||
|
memzero(slotValue, m.valueSize)
|
||||||
m.count--
|
m.count--
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче