Prechádzať zdrojové kódy

unix: add NFDBITS const on Linux, update TestSelect

Adjust TestSelect on Linux to match the Darwin/*BSD changes in CL
196802.

Updates golang/go#34458

Change-Id: Ia17fdadf7091001ea785391da23aaf9d3ec4ac5e
Reviewed-on: https://go-review.googlesource.com/c/sys/+/196806
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Tobias Klauser 6 rokov pred
rodič
commit
2837fb4f24

+ 1 - 0
unix/mkerrors.sh

@@ -182,6 +182,7 @@ struct ltchars {
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sys/time.h>
+#include <sys/select.h>
 #include <sys/signalfd.h>
 #include <sys/socket.h>
 #include <sys/xattr.h>

+ 32 - 2
unix/syscall_linux_test.go

@@ -238,23 +238,53 @@ func TestRlimitAs(t *testing.T) {
 }
 
 func TestSelect(t *testing.T) {
-	_, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0})
+	n, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0})
 	if err != nil {
 		t.Fatalf("Select: %v", err)
 	}
+	if n != 0 {
+		t.Fatalf("Select: expected 0 ready file descriptors, got %v", n)
+	}
 
 	dur := 150 * time.Millisecond
 	tv := unix.NsecToTimeval(int64(dur))
 	start := time.Now()
-	_, err = unix.Select(0, nil, nil, nil, &tv)
+	n, err = unix.Select(0, nil, nil, nil, &tv)
 	took := time.Since(start)
 	if err != nil {
 		t.Fatalf("Select: %v", err)
 	}
+	if n != 0 {
+		t.Fatalf("Select: expected 0 ready file descriptors, got %v", n)
+	}
 
 	if took < dur {
 		t.Errorf("Select: timeout should have been at least %v, got %v", dur, took)
 	}
+
+	rr, ww, err := os.Pipe()
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer rr.Close()
+	defer ww.Close()
+
+	if _, err := ww.Write([]byte("HELLO GOPHER")); err != nil {
+		t.Fatal(err)
+	}
+
+	rFdSet := &unix.FdSet{}
+	fd := rr.Fd()
+	// FD_SET(fd, rFdSet)
+	rFdSet.Bits[fd/unix.NFDBITS] |= (1 << (fd % unix.NFDBITS))
+
+	n, err = unix.Select(int(fd+1), rFdSet, nil, nil, nil)
+	if err != nil {
+		t.Fatalf("Select: %v", err)
+	}
+	if n != 1 {
+		t.Fatalf("Select: expected 1 ready file descriptors, got %v", n)
+	}
 }
 
 func TestPselect(t *testing.T) {

+ 1 - 0
unix/zerrors_linux_386.go

@@ -1361,6 +1361,7 @@ const (
 	NETLINK_XFRM                         = 0x6
 	NETNSA_MAX                           = 0x5
 	NETNSA_NSID_NOT_ASSIGNED             = -0x1
+	NFDBITS                              = 0x20
 	NFNETLINK_V0                         = 0x0
 	NFNLGRP_ACCT_QUOTA                   = 0x8
 	NFNLGRP_CONNTRACK_DESTROY            = 0x3

+ 1 - 0
unix/zerrors_linux_amd64.go

@@ -1361,6 +1361,7 @@ const (
 	NETLINK_XFRM                         = 0x6
 	NETNSA_MAX                           = 0x5
 	NETNSA_NSID_NOT_ASSIGNED             = -0x1
+	NFDBITS                              = 0x40
 	NFNETLINK_V0                         = 0x0
 	NFNLGRP_ACCT_QUOTA                   = 0x8
 	NFNLGRP_CONNTRACK_DESTROY            = 0x3

+ 1 - 0
unix/zerrors_linux_arm.go

@@ -1359,6 +1359,7 @@ const (
 	NETLINK_XFRM                         = 0x6
 	NETNSA_MAX                           = 0x5
 	NETNSA_NSID_NOT_ASSIGNED             = -0x1
+	NFDBITS                              = 0x20
 	NFNETLINK_V0                         = 0x0
 	NFNLGRP_ACCT_QUOTA                   = 0x8
 	NFNLGRP_CONNTRACK_DESTROY            = 0x3

+ 1 - 0
unix/zerrors_linux_arm64.go

@@ -1362,6 +1362,7 @@ const (
 	NETLINK_XFRM                         = 0x6
 	NETNSA_MAX                           = 0x5
 	NETNSA_NSID_NOT_ASSIGNED             = -0x1
+	NFDBITS                              = 0x40
 	NFNETLINK_V0                         = 0x0
 	NFNLGRP_ACCT_QUOTA                   = 0x8
 	NFNLGRP_CONNTRACK_DESTROY            = 0x3

+ 1 - 0
unix/zerrors_linux_mips.go

@@ -1359,6 +1359,7 @@ const (
 	NETLINK_XFRM                         = 0x6
 	NETNSA_MAX                           = 0x5
 	NETNSA_NSID_NOT_ASSIGNED             = -0x1
+	NFDBITS                              = 0x20
 	NFNETLINK_V0                         = 0x0
 	NFNLGRP_ACCT_QUOTA                   = 0x8
 	NFNLGRP_CONNTRACK_DESTROY            = 0x3

+ 1 - 0
unix/zerrors_linux_mips64.go

@@ -1359,6 +1359,7 @@ const (
 	NETLINK_XFRM                         = 0x6
 	NETNSA_MAX                           = 0x5
 	NETNSA_NSID_NOT_ASSIGNED             = -0x1
+	NFDBITS                              = 0x40
 	NFNETLINK_V0                         = 0x0
 	NFNLGRP_ACCT_QUOTA                   = 0x8
 	NFNLGRP_CONNTRACK_DESTROY            = 0x3

+ 1 - 0
unix/zerrors_linux_mips64le.go

@@ -1359,6 +1359,7 @@ const (
 	NETLINK_XFRM                         = 0x6
 	NETNSA_MAX                           = 0x5
 	NETNSA_NSID_NOT_ASSIGNED             = -0x1
+	NFDBITS                              = 0x40
 	NFNETLINK_V0                         = 0x0
 	NFNLGRP_ACCT_QUOTA                   = 0x8
 	NFNLGRP_CONNTRACK_DESTROY            = 0x3

+ 1 - 0
unix/zerrors_linux_mipsle.go

@@ -1359,6 +1359,7 @@ const (
 	NETLINK_XFRM                         = 0x6
 	NETNSA_MAX                           = 0x5
 	NETNSA_NSID_NOT_ASSIGNED             = -0x1
+	NFDBITS                              = 0x20
 	NFNETLINK_V0                         = 0x0
 	NFNLGRP_ACCT_QUOTA                   = 0x8
 	NFNLGRP_CONNTRACK_DESTROY            = 0x3

+ 1 - 0
unix/zerrors_linux_ppc64.go

@@ -1358,6 +1358,7 @@ const (
 	NETLINK_XFRM                         = 0x6
 	NETNSA_MAX                           = 0x5
 	NETNSA_NSID_NOT_ASSIGNED             = -0x1
+	NFDBITS                              = 0x40
 	NFNETLINK_V0                         = 0x0
 	NFNLGRP_ACCT_QUOTA                   = 0x8
 	NFNLGRP_CONNTRACK_DESTROY            = 0x3

+ 1 - 0
unix/zerrors_linux_ppc64le.go

@@ -1358,6 +1358,7 @@ const (
 	NETLINK_XFRM                         = 0x6
 	NETNSA_MAX                           = 0x5
 	NETNSA_NSID_NOT_ASSIGNED             = -0x1
+	NFDBITS                              = 0x40
 	NFNETLINK_V0                         = 0x0
 	NFNLGRP_ACCT_QUOTA                   = 0x8
 	NFNLGRP_CONNTRACK_DESTROY            = 0x3

+ 1 - 0
unix/zerrors_linux_riscv64.go

@@ -1359,6 +1359,7 @@ const (
 	NETLINK_XFRM                         = 0x6
 	NETNSA_MAX                           = 0x5
 	NETNSA_NSID_NOT_ASSIGNED             = -0x1
+	NFDBITS                              = 0x40
 	NFNETLINK_V0                         = 0x0
 	NFNLGRP_ACCT_QUOTA                   = 0x8
 	NFNLGRP_CONNTRACK_DESTROY            = 0x3

+ 1 - 0
unix/zerrors_linux_s390x.go

@@ -1359,6 +1359,7 @@ const (
 	NETLINK_XFRM                         = 0x6
 	NETNSA_MAX                           = 0x5
 	NETNSA_NSID_NOT_ASSIGNED             = -0x1
+	NFDBITS                              = 0x40
 	NFNETLINK_V0                         = 0x0
 	NFNLGRP_ACCT_QUOTA                   = 0x8
 	NFNLGRP_CONNTRACK_DESTROY            = 0x3

+ 1 - 0
unix/zerrors_linux_sparc64.go

@@ -1363,6 +1363,7 @@ const (
 	NETLINK_XFRM                         = 0x6
 	NETNSA_MAX                           = 0x5
 	NETNSA_NSID_NOT_ASSIGNED             = -0x1
+	NFDBITS                              = 0x40
 	NFNETLINK_V0                         = 0x0
 	NFNLGRP_ACCT_QUOTA                   = 0x8
 	NFNLGRP_CONNTRACK_DESTROY            = 0x3