aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/slice.c
diff options
context:
space:
mode:
authorDmitriy Vyukov <dvyukov@google.com>2012-11-30 10:29:41 +0400
committerDmitriy Vyukov <dvyukov@google.com>2012-11-30 10:29:41 +0400
commit0ce96f9ef4533430634fe4329b640176074ef9c4 (patch)
treefbb5d8af81e28fea273b39c772987b790e0e666b /src/pkg/runtime/slice.c
parentc3c107f67c86e9e0bf03f831be4f9417c75463a4 (diff)
downloadgo-0ce96f9ef4533430634fe4329b640176074ef9c4.tar.xz
runtime: better stack traces in race reports
When a race happens inside of runtime (chan, slice, etc), currently reports contain only user file:line. If the line contains a complex expression, it's difficult to figure out where the race exactly. This change adds one more top frame with exact runtime function (e.g. runtime.chansend, runtime.mapaccess). R=golang-dev CC=golang-dev https://golang.org/cl/6851125
Diffstat (limited to 'src/pkg/runtime/slice.c')
-rw-r--r--src/pkg/runtime/slice.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/pkg/runtime/slice.c b/src/pkg/runtime/slice.c
index 2f62c4c02d..e2c76eb8e7 100644
--- a/src/pkg/runtime/slice.c
+++ b/src/pkg/runtime/slice.c
@@ -83,11 +83,11 @@ runtime·appendslice(SliceType *t, Slice x, Slice y, Slice ret)
if(raceenabled) {
pc = runtime·getcallerpc(&t);
for(i=0; i<x.len; i++)
- runtime·racereadpc(x.array + i*t->elem->size, pc);
+ runtime·racereadpc(x.array + i*t->elem->size, pc, runtime·appendslice);
for(i=x.len; i<x.cap; i++)
- runtime·racewritepc(x.array + i*t->elem->size, pc);
+ runtime·racewritepc(x.array + i*t->elem->size, pc, runtime·appendslice);
for(i=0; i<y.len; i++)
- runtime·racereadpc(y.array + i*t->elem->size, pc);
+ runtime·racereadpc(y.array + i*t->elem->size, pc, runtime·appendslice);
}
if(m > x.cap)
@@ -118,9 +118,9 @@ runtime·appendstr(SliceType *t, Slice x, String y, Slice ret)
if(raceenabled) {
pc = runtime·getcallerpc(&t);
for(i=0; i<x.len; i++)
- runtime·racereadpc(x.array + i*t->elem->size, pc);
+ runtime·racereadpc(x.array + i*t->elem->size, pc, runtime·appendstr);
for(i=x.len; i<x.cap; i++)
- runtime·racewritepc(x.array + i*t->elem->size, pc);
+ runtime·racewritepc(x.array + i*t->elem->size, pc, runtime·appendstr);
}
if(m > x.cap)
@@ -153,7 +153,7 @@ runtime·growslice(SliceType *t, Slice old, int64 n, Slice ret)
if(raceenabled) {
pc = runtime·getcallerpc(&t);
for(i=0; i<old.len; i++)
- runtime·racewritepc(old.array + i*t->elem->size, pc);
+ runtime·racewritepc(old.array + i*t->elem->size, pc, runtime·growslice);
}
growslice1(t, old, cap, &ret);
@@ -213,8 +213,8 @@ runtime·copy(Slice to, Slice fm, uintptr width, intgo ret)
if(raceenabled) {
pc = runtime·getcallerpc(&to);
for(i=0; i<ret; i++) {
- runtime·racewritepc(to.array + i*width, pc);
- runtime·racereadpc(fm.array + i*width, pc);
+ runtime·racewritepc(to.array + i*width, pc, runtime·copy);
+ runtime·racereadpc(fm.array + i*width, pc, runtime·copy);
}
}
@@ -259,7 +259,7 @@ runtime·slicestringcopy(Slice to, String fm, intgo ret)
if(raceenabled) {
pc = runtime·getcallerpc(&to);
for(i=0; i<ret; i++) {
- runtime·racewritepc(to.array + i, pc);
+ runtime·racewritepc(to.array + i, pc, runtime·slicestringcopy);
}
}