diff options
author | Dmitri Goutnik <dmgk@FreeBSD.org> | 2022-08-22 12:55:48 +0000 |
---|---|---|
committer | Dmitri Goutnik <dmgk@FreeBSD.org> | 2022-08-22 12:58:27 +0000 |
commit | e27b4194097ae00c09ee7f1ad43316d8e844f537 (patch) | |
tree | 988689ca1af86f0ffd9e41cd8590408ba8cb9d11 | |
parent | 0fc04a03bcdaa18e8069b56d4339b1ff8bedc866 (diff) | |
download | ports-e27b4194097ae00c09ee7f1ad43316d8e844f537.tar.gz ports-e27b4194097ae00c09ee7f1ad43316d8e844f537.zip |
lang/go118: Backport upstream fix for /dev/fuse polling issue
This a backport of Go CL 420334.
PR: 258056
Obtained from: https://go-review.googlesource.com/c/go/+/420334/
-rw-r--r-- | lang/go118/Makefile | 2 | ||||
-rw-r--r-- | lang/go118/files/patch-src_os_file__unix.go | 55 |
2 files changed, 56 insertions, 1 deletions
diff --git a/lang/go118/Makefile b/lang/go118/Makefile index 3ae392de7809..7705c7b8981c 100644 --- a/lang/go118/Makefile +++ b/lang/go118/Makefile @@ -1,6 +1,6 @@ DISTVERSION= 1.18.5 # Always set PORTREVISION explicitly as otherwise they are inherited from lang/go-devel -PORTREVISION= 0 +PORTREVISION= 1 MASTER_SITES= https://golang.org/dl/ \ https://github.com/dmgk/go-bootstrap/releases/download/${BOOTSTRAP_TAG}/:bootstrap \ LOCAL/dmgk:bootstrap diff --git a/lang/go118/files/patch-src_os_file__unix.go b/lang/go118/files/patch-src_os_file__unix.go new file mode 100644 index 000000000000..3f53fce01948 --- /dev/null +++ b/lang/go118/files/patch-src_os_file__unix.go @@ -0,0 +1,55 @@ +From 21a3e299aad894f744292d8cf1db4120efb3651f Mon Sep 17 00:00:00 2001 +From: Yuval Pavel Zholkover <paulzhol@gmail.com> +Date: Sat, 30 Jul 2022 20:41:58 +0300 +Subject: [PATCH] os: only add file descriptors which are set to non-blocking mode to the netpoller + +Either ones where kind == kindNonBlock or those we've successfully called syscall.SetNonblock() on. +Restore blocking behavior if we detect an error registering with the netpoller and our flow was +successful in setting the inital syscall.SetNonblock(). + +Update #54100 + +Change-Id: I08934e4107c7fb36c15a7ca23ac880490b4df235 + +--- src/os/file_unix.go.orig 2022-08-01 22:45:57 UTC ++++ src/os/file_unix.go +@@ -168,18 +168,28 @@ func newFile(fd uintptr, name string, kind newFileKind + } + } + +- if err := f.pfd.Init("file", pollable); err != nil { +- // An error here indicates a failure to register +- // with the netpoll system. That can happen for +- // a file descriptor that is not supported by +- // epoll/kqueue; for example, disk files on +- // Linux systems. We assume that any real error +- // will show up in later I/O. +- } else if pollable { +- // We successfully registered with netpoll, so put +- // the file into nonblocking mode. +- if err := syscall.SetNonblock(fdi, true); err == nil { ++ clearNonBlock := false ++ if pollable { ++ if kind == kindNonBlock { + f.nonblock = true ++ } else if err := syscall.SetNonblock(fdi, true); err == nil { ++ f.nonblock = true ++ clearNonBlock = true ++ } else { ++ pollable = false ++ } ++ } ++ ++ // An error here indicates a failure to register ++ // with the netpoll system. That can happen for ++ // a file descriptor that is not supported by ++ // epoll/kqueue; for example, disk files on ++ // Linux systems. We assume that any real error ++ // will show up in later I/O. ++ // We do restore the blocking behavior if it was set by us. ++ if pollErr := f.pfd.Init("file", pollable); pollErr != nil && clearNonBlock { ++ if err := syscall.SetNonblock(fdi, false); err == nil { ++ f.nonblock = false + } + } + |