Commit a73c1cef authored by Russ Cox's avatar Russ Cox

runtime: add missing write barriers in append's copy of slice data

Found with GODEBUG=wbshadow=1 mode.
Eventually that will run automatically, but right now
it still detects other missing write barriers.

Change-Id: Ic8624401d7c8225a935f719f96f2675c6f5c0d7c
Reviewed-on: https://go-review.googlesource.com/2064Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
Reviewed-by: 's avatarAustin Clements <austin@google.com>
parent dcec123a
......@@ -81,12 +81,16 @@ func growslice(t *slicetype, old sliceStruct, n int64) sliceStruct {
var p unsafe.Pointer
if et.kind&kindNoPointers != 0 {
p = rawmem(capmem)
memmove(p, old.array, lenmem)
memclr(add(p, lenmem), capmem-lenmem)
} else {
// Note: can't use rawmem (which avoids zeroing of memory), because then GC can scan unitialized memory
// Note: can't use rawmem (which avoids zeroing of memory), because then GC can scan unitialized memory.
// TODO(rsc): Use memmove when !needwb().
p = newarray(et, uintptr(newcap))
for i := 0; i < old.len; i++ {
writebarrierfat(et, add(p, uintptr(i)*et.size), add(old.array, uintptr(i)*et.size))
}
}
memmove(p, old.array, lenmem)
return sliceStruct{p, old.len, newcap}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment