]> Cypherpunks repositories - gostls13.git/commitdiff
net, syscall, os: set CLOEXEC flag on epoll/kqueue descriptor
authorIan Lance Taylor <iant@golang.org>
Mon, 19 Dec 2011 20:57:49 +0000 (12:57 -0800)
committerIan Lance Taylor <iant@golang.org>
Mon, 19 Dec 2011 20:57:49 +0000 (12:57 -0800)
Enable new test in os.

R=dave, iant, rsc
CC=golang-dev
https://golang.org/cl/5494061

src/pkg/net/fd_darwin.go
src/pkg/net/fd_freebsd.go
src/pkg/net/fd_linux.go
src/pkg/net/fd_netbsd.go
src/pkg/net/fd_openbsd.go
src/pkg/os/exec/exec_test.go
src/pkg/syscall/syscall_linux.go
src/pkg/syscall/zsyscall_linux_386.go
src/pkg/syscall/zsyscall_linux_amd64.go
src/pkg/syscall/zsyscall_linux_arm.go

index 52164041fdf36a07a4cbcab9bef64516ce7ab452..c6db083c495c255201effdab59dd4228b96fd4e1 100644 (file)
@@ -27,6 +27,7 @@ func newpollster() (p *pollster, err error) {
        if p.kq, err = syscall.Kqueue(); err != nil {
                return nil, os.NewSyscallError("kqueue", err)
        }
+       syscall.CloseOnExec(p.kq)
        p.events = p.eventbuf[0:0]
        return p, nil
 }
index e52ac356b9fd5b086c3bb38e37fb34b28a04bb50..31d0744e2cbe56af2447f2b14a84ce812bf607b1 100644 (file)
@@ -26,6 +26,7 @@ func newpollster() (p *pollster, err error) {
        if p.kq, err = syscall.Kqueue(); err != nil {
                return nil, os.NewSyscallError("kqueue", err)
        }
+       syscall.CloseOnExec(p.kq)
        p.events = p.eventbuf[0:0]
        return p, nil
 }
index 8e07833882e5a48d88c9158bedaf05b707856297..c8df9c9326a0b8dc418ec56739dd8f532d9f06dd 100644 (file)
@@ -37,11 +37,17 @@ func newpollster() (p *pollster, err error) {
        p = new(pollster)
        var e error
 
-       // The arg to epoll_create is a hint to the kernel
-       // about the number of FDs we will care about.
-       // We don't know, and since 2.6.8 the kernel ignores it anyhow.
-       if p.epfd, e = syscall.EpollCreate(16); e != nil {
-               return nil, os.NewSyscallError("epoll_create", e)
+       if p.epfd, e = syscall.EpollCreate1(syscall.EPOLL_CLOEXEC); e != nil {
+               if e != syscall.ENOSYS {
+                       return nil, os.NewSyscallError("epoll_create1", e)
+               }
+               // The arg to epoll_create is a hint to the kernel
+               // about the number of FDs we will care about.
+               // We don't know, and since 2.6.8 the kernel ignores it anyhow.
+               if p.epfd, e = syscall.EpollCreate(16); e != nil {
+                       return nil, os.NewSyscallError("epoll_create", e)
+               }
+               syscall.CloseOnExec(p.epfd)
        }
        p.events = make(map[int]uint32)
        return p, nil
index e52ac356b9fd5b086c3bb38e37fb34b28a04bb50..31d0744e2cbe56af2447f2b14a84ce812bf607b1 100644 (file)
@@ -26,6 +26,7 @@ func newpollster() (p *pollster, err error) {
        if p.kq, err = syscall.Kqueue(); err != nil {
                return nil, os.NewSyscallError("kqueue", err)
        }
+       syscall.CloseOnExec(p.kq)
        p.events = p.eventbuf[0:0]
        return p, nil
 }
index e52ac356b9fd5b086c3bb38e37fb34b28a04bb50..31d0744e2cbe56af2447f2b14a84ce812bf607b1 100644 (file)
@@ -26,6 +26,7 @@ func newpollster() (p *pollster, err error) {
        if p.kq, err = syscall.Kqueue(); err != nil {
                return nil, os.NewSyscallError("kqueue", err)
        }
+       syscall.CloseOnExec(p.kq)
        p.events = p.eventbuf[0:0]
        return p, nil
 }
index 4cd346a68b09902ede60e933e3f0b755dfe9e31e..a015cbe96cc051d541bd718d9e28713e9bd45785 100644 (file)
@@ -256,12 +256,6 @@ func TestHelperProcess(*testing.T) {
                        fmt.Printf("ReadAll from fd 3: %v", err)
                        os.Exit(1)
                }
-               // TODO(bradfitz,iant): the rest of this test is disabled
-               // for now. remove this block once 5494061 is in.
-               {
-                       os.Stderr.Write(bs)
-                       os.Exit(0)
-               }
                // Now verify that there are no other open fds.
                var files []*os.File
                for wantfd := os.Stderr.Fd() + 2; wantfd <= 100; wantfd++ {
index bae7f20e1ccabff532e75b71128c635945ae30ba..3a1331c71cd82e4246c8a80ead5d6be6fa434e5a 100644 (file)
@@ -806,6 +806,7 @@ func Mount(source string, target string, fstype string, flags uintptr, data stri
 //sysnb        Dup(oldfd int) (fd int, err error)
 //sysnb        Dup2(oldfd int, newfd int) (fd int, err error)
 //sysnb        EpollCreate(size int) (fd int, err error)
+//sysnb        EpollCreate1(flag int) (fd int, err error)
 //sysnb        EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error)
 //sys  EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
 //sys  Exit(code int) = SYS_EXIT_GROUP
index 0566dce03308f9a883355651d3b956f0d6549959..8c3a844754d1a9e30986b411d1a18e4298fbcf59 100644 (file)
@@ -232,6 +232,17 @@ func EpollCreate(size int) (fd int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func EpollCreate1(flag int) (fd int, err error) {
+       r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
+       fd = int(r0)
+       if e1 != 0 {
+               err = e1
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
        _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
        if e1 != 0 {
index 0e0b9de6eaf3190930f991ec185ff714b66afa89..c53fff7a27c0ad87114c45cc400a499f7d75057d 100644 (file)
@@ -232,6 +232,17 @@ func EpollCreate(size int) (fd int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func EpollCreate1(flag int) (fd int, err error) {
+       r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
+       fd = int(r0)
+       if e1 != 0 {
+               err = e1
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
        _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
        if e1 != 0 {
index 7f2152cd982543eccd4b1a22aa49f727831f42cd..d739139dceec39ad15ac43e55aff748c2995fc3e 100644 (file)
@@ -232,6 +232,17 @@ func EpollCreate(size int) (fd int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func EpollCreate1(flag int) (fd int, err error) {
+       r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
+       fd = int(r0)
+       if e1 != 0 {
+               err = e1
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
        _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
        if e1 != 0 {