]> Cypherpunks repositories - gostls13.git/commitdiff
os: always treat files as unpollable on FreeBSD
authorIan Lance Taylor <iant@golang.org>
Wed, 9 Jan 2019 18:04:58 +0000 (10:04 -0800)
committerIan Lance Taylor <iant@golang.org>
Wed, 9 Jan 2019 21:50:11 +0000 (21:50 +0000)
Fixes #29633
Updates #27619

Change-Id: I1e38569ea2a02423b028331f2ed987d3ae47fd2e
Reviewed-on: https://go-review.googlesource.com/c/157099
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/os/file_unix.go

index c91efa818542bb34b51c6155ce0d66f64c8769de..7d68a7659f5bcb3b1f78a34cfcff0287b9f85c66 100644 (file)
@@ -123,15 +123,25 @@ func newFile(fd uintptr, name string, kind newFileKind) *File {
        if kind == kindOpenFile {
                var st syscall.Stat_t
                switch runtime.GOOS {
-               // Don't try to use kqueue with regular files on *BSDs.
-               // on FreeBSD with older kernels it used to crash the system unpredictably while running all.bash.
-               // while with newer kernels a regular file is always reported as ready for writing.
-               // on Dragonfly, NetBSD and OpenBSD the fd is signaled only once as ready (both read and write).
-               // Issue 19093.
-               case "dragonfly", "freebsd", "netbsd", "openbsd":
+               case "freebsd":
+                       // On FreeBSD before 10.4 it used to crash the
+                       // system unpredictably while running all.bash.
+                       // When we stop supporting FreeBSD 10 we can merge
+                       // this into the dragonfly/netbsd/openbsd case.
+                       // Issue 27619.
+                       pollable = false
+
+               case "dragonfly", "netbsd", "openbsd":
+                       // Don't try to use kqueue with regular files on *BSDs.
+                       // On FreeBSD a regular file is always
+                       // reported as ready for writing.
+                       // On Dragonfly, NetBSD and OpenBSD the fd is signaled
+                       // only once as ready (both read and write).
+                       // Issue 19093.
                        if err := syscall.Fstat(fdi, &st); err == nil && st.Mode&syscall.S_IFMT == syscall.S_IFREG {
                                pollable = false
                        }
+
                case "darwin":
                        // In addition to the behavior described above for regular files,
                        // on Darwin, kqueue does not work properly with fifos: