]> Cypherpunks repositories - gostls13.git/commitdiff
os/exec: TestExtraFiles - close any leaked file descriptors
authorJoel Sing <jsing@google.com>
Tue, 31 Jan 2012 11:09:06 +0000 (22:09 +1100)
committerJoel Sing <jsing@google.com>
Tue, 31 Jan 2012 11:09:06 +0000 (22:09 +1100)
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

src/pkg/os/exec/exec_test.go

index c68498047faa6ff159c85edaf06ac74b28ad6154..d456dfb53d3e045c0e86ff20907612d33be1b210 100644 (file)
@@ -17,6 +17,7 @@ import (
        "runtime"
        "strconv"
        "strings"
+       "syscall"
        "testing"
 )
 
@@ -150,6 +151,15 @@ func TestExtraFiles(t *testing.T) {
                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
        // doesn't leak to the child,
        ln, err := net.Listen("tcp", "127.0.0.1:0")
@@ -202,6 +212,13 @@ func TestHelperProcess(*testing.T) {
        }
        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
        for len(args) > 0 {
                if args[0] == "--" {
@@ -282,7 +299,7 @@ func TestHelperProcess(*testing.T) {
                                }
                                if got := f.Fd(); 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))
                                        os.Exit(1)
                                }