Mercurial > hg > CbC > CbC_gcc
view libgo/misc/cgo/testsanitizers/testdata/tsan12.go @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 1830386684a0 |
children |
line wrap: on
line source
// 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 installs a // libc interceptor that writes signal handlers to a global variable within the // TSAN runtime instead of making a sigaction system call. A bug in // syscall.runtime_AfterForkInChild corrupted TSAN's signal forwarding table // during calls to (*os/exec.Cmd).Run, causing the parent process to fail to // invoke signal handlers. import ( "fmt" "os" "os/exec" "os/signal" "syscall" ) import "C" func main() { ch := make(chan os.Signal) signal.Notify(ch, syscall.SIGUSR1) if err := exec.Command("true").Run(); err != nil { fmt.Fprintf(os.Stderr, "Unexpected error from `true`: %v", err) os.Exit(1) } syscall.Kill(syscall.Getpid(), syscall.SIGUSR1) <-ch }