Commit a5318bf5 authored by Ian Lance Taylor's avatar Ian Lance Taylor

os: always treat files as unpollable on FreeBSD

Fixes #29633
Updates #27619

Change-Id: I1e38569ea2a02423b028331f2ed987d3ae47fd2e
Reviewed-on: https://go-review.googlesource.com/c/157099Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 9a5a5043
...@@ -123,15 +123,25 @@ func newFile(fd uintptr, name string, kind newFileKind) *File { ...@@ -123,15 +123,25 @@ func newFile(fd uintptr, name string, kind newFileKind) *File {
if kind == kindOpenFile { if kind == kindOpenFile {
var st syscall.Stat_t var st syscall.Stat_t
switch runtime.GOOS { switch runtime.GOOS {
// Don't try to use kqueue with regular files on *BSDs. case "freebsd":
// on FreeBSD with older kernels it used to crash the system unpredictably while running all.bash. // On FreeBSD before 10.4 it used to crash the
// while with newer kernels a regular file is always reported as ready for writing. // system unpredictably while running all.bash.
// on Dragonfly, NetBSD and OpenBSD the fd is signaled only once as ready (both read and write). // When we stop supporting FreeBSD 10 we can merge
// Issue 19093. // this into the dragonfly/netbsd/openbsd case.
case "dragonfly", "freebsd", "netbsd", "openbsd": // 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 { if err := syscall.Fstat(fdi, &st); err == nil && st.Mode&syscall.S_IFMT == syscall.S_IFREG {
pollable = false pollable = false
} }
case "darwin": case "darwin":
// In addition to the behavior described above for regular files, // In addition to the behavior described above for regular files,
// on Darwin, kqueue does not work properly with fifos: // on Darwin, kqueue does not work properly with fifos:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment