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 > <javascript:>> 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. Manlio -- 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/f28d8228-a5b0-4385-8cff-a86f54fb4f62%40googlegroups.com.