mirror of
https://github.com/golang/go
synced 2024-11-25 07:17:56 -07:00
net, syscall, os: set CLOEXEC flag on epoll/kqueue descriptor
Enable new test in os. R=dave, iant, rsc CC=golang-dev https://golang.org/cl/5494061
This commit is contained in:
parent
1d0f93b4be
commit
384329592a
@ -27,6 +27,7 @@ func newpollster() (p *pollster, err error) {
|
|||||||
if p.kq, err = syscall.Kqueue(); err != nil {
|
if p.kq, err = syscall.Kqueue(); err != nil {
|
||||||
return nil, os.NewSyscallError("kqueue", err)
|
return nil, os.NewSyscallError("kqueue", err)
|
||||||
}
|
}
|
||||||
|
syscall.CloseOnExec(p.kq)
|
||||||
p.events = p.eventbuf[0:0]
|
p.events = p.eventbuf[0:0]
|
||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@ func newpollster() (p *pollster, err error) {
|
|||||||
if p.kq, err = syscall.Kqueue(); err != nil {
|
if p.kq, err = syscall.Kqueue(); err != nil {
|
||||||
return nil, os.NewSyscallError("kqueue", err)
|
return nil, os.NewSyscallError("kqueue", err)
|
||||||
}
|
}
|
||||||
|
syscall.CloseOnExec(p.kq)
|
||||||
p.events = p.eventbuf[0:0]
|
p.events = p.eventbuf[0:0]
|
||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
@ -37,12 +37,18 @@ func newpollster() (p *pollster, err error) {
|
|||||||
p = new(pollster)
|
p = new(pollster)
|
||||||
var e error
|
var e error
|
||||||
|
|
||||||
|
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
|
// The arg to epoll_create is a hint to the kernel
|
||||||
// about the number of FDs we will care about.
|
// about the number of FDs we will care about.
|
||||||
// We don't know, and since 2.6.8 the kernel ignores it anyhow.
|
// We don't know, and since 2.6.8 the kernel ignores it anyhow.
|
||||||
if p.epfd, e = syscall.EpollCreate(16); e != nil {
|
if p.epfd, e = syscall.EpollCreate(16); e != nil {
|
||||||
return nil, os.NewSyscallError("epoll_create", e)
|
return nil, os.NewSyscallError("epoll_create", e)
|
||||||
}
|
}
|
||||||
|
syscall.CloseOnExec(p.epfd)
|
||||||
|
}
|
||||||
p.events = make(map[int]uint32)
|
p.events = make(map[int]uint32)
|
||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@ func newpollster() (p *pollster, err error) {
|
|||||||
if p.kq, err = syscall.Kqueue(); err != nil {
|
if p.kq, err = syscall.Kqueue(); err != nil {
|
||||||
return nil, os.NewSyscallError("kqueue", err)
|
return nil, os.NewSyscallError("kqueue", err)
|
||||||
}
|
}
|
||||||
|
syscall.CloseOnExec(p.kq)
|
||||||
p.events = p.eventbuf[0:0]
|
p.events = p.eventbuf[0:0]
|
||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@ func newpollster() (p *pollster, err error) {
|
|||||||
if p.kq, err = syscall.Kqueue(); err != nil {
|
if p.kq, err = syscall.Kqueue(); err != nil {
|
||||||
return nil, os.NewSyscallError("kqueue", err)
|
return nil, os.NewSyscallError("kqueue", err)
|
||||||
}
|
}
|
||||||
|
syscall.CloseOnExec(p.kq)
|
||||||
p.events = p.eventbuf[0:0]
|
p.events = p.eventbuf[0:0]
|
||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
@ -256,12 +256,6 @@ func TestHelperProcess(*testing.T) {
|
|||||||
fmt.Printf("ReadAll from fd 3: %v", err)
|
fmt.Printf("ReadAll from fd 3: %v", err)
|
||||||
os.Exit(1)
|
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.
|
// Now verify that there are no other open fds.
|
||||||
var files []*os.File
|
var files []*os.File
|
||||||
for wantfd := os.Stderr.Fd() + 2; wantfd <= 100; wantfd++ {
|
for wantfd := os.Stderr.Fd() + 2; wantfd <= 100; wantfd++ {
|
||||||
|
@ -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 Dup(oldfd int) (fd int, err error)
|
||||||
//sysnb Dup2(oldfd int, newfd int) (fd int, err error)
|
//sysnb Dup2(oldfd int, newfd int) (fd int, err error)
|
||||||
//sysnb EpollCreate(size 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)
|
//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 EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
|
||||||
//sys Exit(code int) = SYS_EXIT_GROUP
|
//sys Exit(code int) = SYS_EXIT_GROUP
|
||||||
|
@ -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
|
// 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) {
|
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)
|
_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
|
@ -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
|
// 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) {
|
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)
|
_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
|
@ -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
|
// 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) {
|
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)
|
_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
|
Loading…
Reference in New Issue
Block a user