diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2012-07-16 16:01:08 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2012-07-16 16:01:08 +0000 |
commit | 23397107087ad88141393a282cfbbd95d6ba28a6 (patch) | |
tree | 4e57b9c772b547f4b010921e1a73ae4fe2ca3b32 /lib/tsan/go | |
parent | 3f24d6386cea638f5d4bc1694d1de02917988bcd (diff) | |
download | compiler-rt-23397107087ad88141393a282cfbbd95d6ba28a6.tar.gz compiler-rt-23397107087ad88141393a282cfbbd95d6ba28a6.tar.bz2 compiler-rt-23397107087ad88141393a282cfbbd95d6ba28a6.tar.xz |
tsan: Go runtime: support goroutine end event
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@160282 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/tsan/go')
-rw-r--r-- | lib/tsan/go/test.c | 5 | ||||
-rw-r--r-- | lib/tsan/go/tsan_go.cc | 6 |
2 files changed, 11 insertions, 0 deletions
diff --git a/lib/tsan/go/test.c b/lib/tsan/go/test.c index c27a94ad..c6c21a16 100644 --- a/lib/tsan/go/test.c +++ b/lib/tsan/go/test.c @@ -2,6 +2,7 @@ void __tsan_init(); void __tsan_fini(); +void __tsan_event(int typ, int tid, void *pc, void *addr, int info); int goCallbackCommentPc(void *pc, char **img, char **rtn, char **file, int *l) { return 0; @@ -9,6 +10,10 @@ int goCallbackCommentPc(void *pc, char **img, char **rtn, char **file, int *l) { int main(void) { __tsan_init(); + __tsan_event(1, 0, 0, &main, 0); // READ + __tsan_event(11, 1, 0, 0, 0); // THR_START + __tsan_event(11, 0, 0, &main, 0); // READ + __tsan_event(13, 1, 0, 0, 0); // THR_END printf("OK\n"); __tsan_fini(); return 0; diff --git a/lib/tsan/go/tsan_go.cc b/lib/tsan/go/tsan_go.cc index 13cc569f..de69709e 100644 --- a/lib/tsan/go/tsan_go.cc +++ b/lib/tsan/go/tsan_go.cc @@ -210,6 +210,12 @@ void __tsan_event(int typ, int tid, void *pc, void *addr, int info) { thr->in_rtl--; break; } + case THR_END: { + thr->in_rtl++; + ThreadFinish(thr); + thr->in_rtl--; + break; + } default: Printf("Unknown event type %d\n", typ); Die(); |