diff options
author | Bryan C. Mills <bcmills@google.com> | 2019-02-22 08:36:41 -0500 |
---|---|---|
committer | Bryan C. Mills <bcmills@google.com> | 2019-02-22 21:58:00 +0000 |
commit | 8f1e2d4ef7c8d415b0a2e4ae08e16e4722c795d5 (patch) | |
tree | e8d5f22e13a48ee23d640bb702476ab14bc382ff /misc/cgo/testsanitizers/testdata/tsan11.go | |
parent | a00611f58d5322899c45c63758e43d2a2c5a2a11 (diff) | |
download | go-8f1e2d4ef7c8d415b0a2e4ae08e16e4722c795d5.tar.gz go-8f1e2d4ef7c8d415b0a2e4ae08e16e4722c795d5.zip |
misc/cgo/testsanitizers: move test source files into testdata directory
If we run 'go test ./...' in the misc module, we don't want to see
errors for these standalone files.
We could instead add +ignore tags to each file individually, but this
is exactly what a testdata directory is for.
Updates #30228
Change-Id: I7047ad888dd6aff701f5982d58b6a79f6a487c58
Reviewed-on: https://go-review.googlesource.com/c/163417
Run-TryBot: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Jay Conrod <jayconrod@google.com>
Diffstat (limited to 'misc/cgo/testsanitizers/testdata/tsan11.go')
-rw-r--r-- | misc/cgo/testsanitizers/testdata/tsan11.go | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/misc/cgo/testsanitizers/testdata/tsan11.go b/misc/cgo/testsanitizers/testdata/tsan11.go new file mode 100644 index 0000000000..70ac9c8ae2 --- /dev/null +++ b/misc/cgo/testsanitizers/testdata/tsan11.go @@ -0,0 +1,55 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +// This program hung when run under the C/C++ ThreadSanitizer. TSAN defers +// asynchronous signals until the signaled thread calls into libc. The runtime's +// sysmon goroutine idles itself using direct usleep syscalls, so it could +// run for an arbitrarily long time without triggering the libc interceptors. +// See https://golang.org/issue/18717. + +import ( + "os" + "os/signal" + "syscall" +) + +/* +#cgo CFLAGS: -g -fsanitize=thread +#cgo LDFLAGS: -g -fsanitize=thread + +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +static void raise_usr2(int signo) { + raise(SIGUSR2); +} + +static void register_handler(int signo) { + struct sigaction sa; + memset(&sa, 0, sizeof(sa)); + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_ONSTACK; + sa.sa_handler = raise_usr2; + + if (sigaction(SIGUSR1, &sa, NULL) != 0) { + perror("failed to register SIGUSR1 handler"); + exit(EXIT_FAILURE); + } +} +*/ +import "C" + +func main() { + ch := make(chan os.Signal) + signal.Notify(ch, syscall.SIGUSR2) + + C.register_handler(C.int(syscall.SIGUSR1)) + syscall.Kill(syscall.Getpid(), syscall.SIGUSR1) + + <-ch +} |