Releases: cloudflare/tableflip
Allow getting all inherited files
Fix passing arguments to child processes
The previous release introduces a bug when starting a child process: the argument vector (aka argv) is populated incorrectly. The result is that processes that use argv will likely fail and processes that don't use argv will fail to upgrade.
Fix clearing O_NONBLOCK on upgrade
The Go runtime has annoying behaviour around setting and clearing
O_NONBLOCK: exec.Cmd.Start() ends up calling os.File.Fd() for any
file in exec.Cmd.ExtraFiles. os.File.Fd() disables both the use
of the runtime poller for the file and clears O_NONBLOCK from
the underlying open file descriptor.
This can lead to goroutines hanging in a parent process, after at least
one failed upgrade. The bug manifests by goroutines which rely on
either a deadline or interruption via Close() to be unblocked being stuck
in read or accept like syscalls,. As far as I can tell we've not experienced
this problem in production, so it's most likely quite rare.
Support net.PacketConn
Add built-in support for passing net.PacketConn around. This was possible using Fds.AddConn, but the new PacketConn support will also do correct unlinking of Unix domain sockets if necessary.
Allow compiling programs using tableflip on Windows
So far, developers working on a code base that uses tableflip on a Windows machine had a poor experience. Editing and building the program didn't work. Thanks to @kohenkatz the library compiles on Windows without errors, and tableflip.New returns an error on Windows. Developers can use this to shim out the upgrader using the new testing subpackage.