mirror of
https://github.com/golang/go
synced 2024-11-18 20:24:41 -07:00
runtime/race: update runtime to r183644
This revision properly handles memory range accesses. Fixes #4453. Fixes #5654. R=golang-dev, iant, remyoudompheng CC=golang-dev https://golang.org/cl/10082043
This commit is contained in:
parent
b76ddefee5
commit
cc99e6e949
Binary file not shown.
Binary file not shown.
Binary file not shown.
42
src/pkg/runtime/race/testdata/mop_test.go
vendored
42
src/pkg/runtime/race/testdata/mop_test.go
vendored
@ -5,6 +5,7 @@
|
||||
package race_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/sha1"
|
||||
"errors"
|
||||
"fmt"
|
||||
@ -1477,8 +1478,7 @@ func TestRaceSliceString(t *testing.T) {
|
||||
<-c
|
||||
}
|
||||
|
||||
// http://golang.org/issue/4453
|
||||
func TestRaceFailingSliceStruct(t *testing.T) {
|
||||
func TestRaceSliceStruct(t *testing.T) {
|
||||
type X struct {
|
||||
x, y int
|
||||
}
|
||||
@ -1493,7 +1493,7 @@ func TestRaceFailingSliceStruct(t *testing.T) {
|
||||
<-c
|
||||
}
|
||||
|
||||
func TestRaceFailingAppendSliceStruct(t *testing.T) {
|
||||
func TestRaceAppendSliceStruct(t *testing.T) {
|
||||
type X struct {
|
||||
x, y int
|
||||
}
|
||||
@ -1670,3 +1670,39 @@ func TestRaceIssue5567(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRaceIssue5654(t *testing.T) {
|
||||
text := `Friends, Romans, countrymen, lend me your ears;
|
||||
I come to bury Caesar, not to praise him.
|
||||
The evil that men do lives after them;
|
||||
The good is oft interred with their bones;
|
||||
So let it be with Caesar. The noble Brutus
|
||||
Hath told you Caesar was ambitious:
|
||||
If it were so, it was a grievous fault,
|
||||
And grievously hath Caesar answer'd it.
|
||||
Here, under leave of Brutus and the rest -
|
||||
For Brutus is an honourable man;
|
||||
So are they all, all honourable men -
|
||||
Come I to speak in Caesar's funeral.
|
||||
He was my friend, faithful and just to me:
|
||||
But Brutus says he was ambitious;
|
||||
And Brutus is an honourable man.`
|
||||
|
||||
data := bytes.NewBufferString(text)
|
||||
in := make(chan []byte)
|
||||
|
||||
go func() {
|
||||
buf := make([]byte, 16)
|
||||
var n int
|
||||
var err error
|
||||
for ; err == nil; n, err = data.Read(buf) {
|
||||
in <- buf[:n]
|
||||
}
|
||||
close(in)
|
||||
}()
|
||||
res := ""
|
||||
for s := range in {
|
||||
res += string(s)
|
||||
}
|
||||
_ = res
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user