diff options
author | Austin Clements <austin@google.com> | 2016-10-17 17:00:05 -0400 |
---|---|---|
committer | Austin Clements <austin@google.com> | 2016-10-28 18:20:04 +0000 |
commit | aa581f51570b1c35dc2648226fd8de861de526d4 (patch) | |
tree | e94aab60525446ca1058b5f62240b1d92c068309 /src/runtime/select.go | |
parent | a475a38a3dcd48541f60e40b1dac3c84ab72d0e5 (diff) | |
download | go-aa581f51570b1c35dc2648226fd8de861de526d4.tar.gz go-aa581f51570b1c35dc2648226fd8de861de526d4.zip |
runtime: use typedmemclr for typed memory
The hybrid barrier requires distinguishing typed and untyped memory
even when zeroing because the *current* contents of the memory matters
even when overwriting.
This commit introduces runtime.typedmemclr and runtime.memclrHasPointers
as a typed memory clearing functions parallel to runtime.typedmemmove.
Currently these simply call memclr, but with the hybrid barrier we'll
need to shade any pointers we're overwriting. These will provide us
with the necessary hooks to do so.
Updates #17503.
Change-Id: I74478619f8907825898092aaa204d6e4690f27e6
Reviewed-on: https://go-review.googlesource.com/31366
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
Diffstat (limited to 'src/runtime/select.go')
-rw-r--r-- | src/runtime/select.go | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/runtime/select.go b/src/runtime/select.go index 1aaafff198..03e9e4a30a 100644 --- a/src/runtime/select.go +++ b/src/runtime/select.go @@ -518,7 +518,7 @@ bufrecv: if cas.elem != nil { typedmemmove(c.elemtype, cas.elem, qp) } - memclr(qp, uintptr(c.elemsize)) + typedmemclr(c.elemtype, qp) c.recvx++ if c.recvx == c.dataqsiz { c.recvx = 0 @@ -564,7 +564,7 @@ rclose: *cas.receivedp = false } if cas.elem != nil { - memclr(cas.elem, uintptr(c.elemsize)) + typedmemclr(c.elemtype, cas.elem) } if raceenabled { raceacquire(unsafe.Pointer(c)) |