mirror of
https://github.com/golang/go
synced 2024-11-26 21:31:32 -07:00
b85c2dd56c
With previous CLs, internal linking without cgo should work well. Enable it by default. And stop always requiring cgo. Enable tests that were previously disabled due to the lack of internal linking. Updates #38485. Change-Id: I45125b9c263fd21d6847aa6b14ecaea3a2989b29 Reviewed-on: https://go-review.googlesource.com/c/go/+/265121 Trust: Cherry Zhang <cherryyz@google.com> Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: Than McIntosh <thanm@google.com>
64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
// run
|
|
|
|
// +build !nacl,!js
|
|
|
|
// Copyright 2019 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.
|
|
//
|
|
// Ensure that deadlock detection can still
|
|
// run even with an import of "_ os/signal".
|
|
|
|
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"time"
|
|
)
|
|
|
|
const prog = `
|
|
package main
|
|
|
|
import _ "os/signal"
|
|
|
|
func main() {
|
|
c := make(chan int)
|
|
c <- 1
|
|
}
|
|
`
|
|
|
|
func main() {
|
|
dir, err := ioutil.TempDir("", "21576")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer os.RemoveAll(dir)
|
|
|
|
file := filepath.Join(dir, "main.go")
|
|
if err := ioutil.WriteFile(file, []byte(prog), 0655); err != nil {
|
|
log.Fatalf("Write error %v", err)
|
|
}
|
|
|
|
// Using a timeout of 1 minute in case other factors might slow
|
|
// down the start of "go run". See https://golang.org/issue/34836.
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
|
|
defer cancel()
|
|
|
|
cmd := exec.CommandContext(ctx, "go", "run", file)
|
|
output, err := cmd.CombinedOutput()
|
|
if err == nil {
|
|
log.Fatalf("Passed, expected an error")
|
|
}
|
|
|
|
want := []byte("fatal error: all goroutines are asleep - deadlock!")
|
|
if !bytes.Contains(output, want) {
|
|
log.Fatalf("Unmatched error message %q:\nin\n%s\nError: %v", want, output, err)
|
|
}
|
|
}
|