Commit 1677f1a1 authored by Joel Sing's avatar Joel Sing

os/exec: TestExtraFiles - close any leaked file descriptors

Ensure that file descriptors have not already been leaked into our
environment - close any that are open at the start of the
TestExtraFiles test.

Also use the appropriate command for listing open files.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/5574062
parent 2d7495d2
...@@ -17,6 +17,7 @@ import ( ...@@ -17,6 +17,7 @@ import (
"runtime" "runtime"
"strconv" "strconv"
"strings" "strings"
"syscall"
"testing" "testing"
) )
...@@ -150,6 +151,15 @@ func TestExtraFiles(t *testing.T) { ...@@ -150,6 +151,15 @@ func TestExtraFiles(t *testing.T) {
return return
} }
// Ensure that file descriptors have not already been leaked into
// our environment.
for fd := os.Stderr.Fd() + 1; fd <= 101; fd++ {
err := syscall.Close(fd)
if err == nil {
t.Logf("Something already leaked - closed fd %d", fd)
}
}
// Force network usage, to verify the epoll (or whatever) fd // Force network usage, to verify the epoll (or whatever) fd
// doesn't leak to the child, // doesn't leak to the child,
ln, err := net.Listen("tcp", "127.0.0.1:0") ln, err := net.Listen("tcp", "127.0.0.1:0")
...@@ -202,6 +212,13 @@ func TestHelperProcess(*testing.T) { ...@@ -202,6 +212,13 @@ func TestHelperProcess(*testing.T) {
} }
defer os.Exit(0) defer os.Exit(0)
// Determine which command to use to display open files.
ofcmd := "lsof"
switch runtime.GOOS {
case "freebsd", "netbsd", "openbsd":
ofcmd = "fstat"
}
args := os.Args args := os.Args
for len(args) > 0 { for len(args) > 0 {
if args[0] == "--" { if args[0] == "--" {
...@@ -282,7 +299,7 @@ func TestHelperProcess(*testing.T) { ...@@ -282,7 +299,7 @@ func TestHelperProcess(*testing.T) {
} }
if got := f.Fd(); got != wantfd { if got := f.Fd(); got != wantfd {
fmt.Printf("leaked parent file. fd = %d; want %d\n", got, wantfd) fmt.Printf("leaked parent file. fd = %d; want %d\n", got, wantfd)
out, _ := Command("lsof", "-p", fmt.Sprint(os.Getpid())).CombinedOutput() out, _ := Command(ofcmd, "-p", fmt.Sprint(os.Getpid())).CombinedOutput()
fmt.Print(string(out)) fmt.Print(string(out))
os.Exit(1) os.Exit(1)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment