On Wed, Feb 26, 2020 at 5:42 PM Michael Jones <michael.jo...@gmail.com> wrote: > > There is the BSD notion of sa_restart, a convenience to loop for the caller > as appropriate. > > https://www.freebsd.org/cgi/man.cgi?query=sigaction > > Go could adopt such a notion if desired.
We already do. We install all signal handlers with the SA_RESTART flag set. Unfortunately if you peruse "man 7 signal" on a GNU/Linux system you will see a list of system calls that return EINTR even if the handler has SA_RESTART set. Ian > On Wed, Feb 26, 2020 at 5:14 PM Ian Lance Taylor <i...@golang.org> wrote: >> >> On Wed, Feb 26, 2020 at 9:11 AM Manlio Perillo <manlio.peri...@gmail.com> >> wrote: >> > >> > On Wednesday, February 26, 2020 at 4:14:38 PM UTC+1, Ian Lance Taylor >> > wrote: >> >> >> >> On Wed, Feb 26, 2020 at 7:11 AM Manlio Perillo <manlio...@gmail.com> >> >> wrote: >> >> > >> >> > On Wednesday, February 26, 2020 at 3:51:54 PM UTC+1, Peter Kleiweg >> >> > wrote: >> >> >> >> >> >> Op woensdag 26 februari 2020 13:05:40 UTC+1 schreef Manlio Perillo: >> >> >>> >> >> >>> On Wednesday, February 26, 2020 at 12:33:05 PM UTC+1, Peter Kleiweg >> >> >>> wrote: >> >> >>>> >> >> >>>> With Go version 1.14 I get a lot of errors when I run: >> >> >>>> >> >> >>>> go test -v github.com/pebbe/zmq4 >> >> >>>> >> >> >>>> I didn't see this with Go 1.13.8 or any earlier version. >> >> >>>> >> >> >>>> Is this a problem with Go 1.14, or am I doing something wrong and >> >> >>>> just got lucky until now? >> >> >>>> >> >> >>>> How do I debug this? The errors are different for each run. Below is >> >> >>>> a sample of some errors. >> >> >>>> Line numbers are not always accurate, because I inserted some calls >> >> >>>> to test.Log(). >> >> >>> >> >> >>> >> >> >>> The errors are probably caused by >> >> >>> https://golang.org/doc/go1.14#runtime. >> >> >>> >> >> >>> The solution is to update zmq4 to explicitly handle interrupted >> >> >>> system calls. >> >> >> >> >> >> >> >> >> Often the program freezes before I get an interrupted system call. It >> >> >> hangs inside a ZeroMQ C++ library function. >> >> >> zmq4 is just a wrapper for ZeroMQ. I can't "fix" ZeroMQ to make it >> >> >> work with Go. >> >> >> >> >> >> Is there a way to stop Go from interrupting my system calls? It >> >> >> happens rather randomly all over the place. >> >> > >> >> > >> >> > https://stackoverflow.com/questions/36040547/zeromq-how-to-react-on-different-signal-types-on-eintr >> >> > >> >> > ZeroMQ may return an EINTR error , but zmq4 does not list it in >> >> > errors.go. >> >> > ZeroMQ asks the caller to handle EINTR, so zmq4 should handle it >> >> > internally or return it to the caller. >> >> > >> >> > https://golang.org/doc/go1.14#runtime should have mentioned that not >> >> > only programs that use packages like syscall or golang.org/x/sys/unix >> >> > will see more slow system calls fail with EINTR errors, but also >> >> > programs that use Cgo. >> >> >> >> I don't know ZeroMQ. If the ZeroMQ calls correspond closely to system >> >> calls, then it could work for them to return EINTR. In that case the >> >> fix is going to be for the Go wrapper around ZeroMQ to check whether >> >> the error returned is syscall.EINTR, and to retry the call if it is. >> >> >> > >> > Unfortunately it is not that simple: >> > >> > http://250bpm.com/blog:12 >> > https://alobbs.com/post/54503240599/close-and-eintr >> > http://man7.org/linux/man-pages/man7/signal.7.html >> > https://github.com/golang/go/issues/11180 >> > https://www.python.org/dev/peps/pep-0475/ >> > >> > The second entry about close and EINTR is enlightening. >> >> Thanks for the links. Note that these issues don't really have >> anything to do with Go. For certain system calls, you need to handle >> EINTR one way or another. The Go runtime does as much as it can to >> avoid these problems, but on Unix systems it is impossible to avoid >> them entirely. >> >> Ian >> >> -- >> You received this message because you are subscribed to the Google Groups >> "golang-nuts" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to golang-nuts+unsubscr...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/CAOyqgcXGcdfpPAz8t8adfqGodKPjZNxKzkTUyB0b4L1zysVFSQ%40mail.gmail.com. > > > > -- > Michael T. Jones > michael.jo...@gmail.com -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAOyqgcUow4D2o-pcZ6J4%3DAnrv9HD0Qcx_cs4e_rgjCeBSbasaw%40mail.gmail.com.