Try to more gracefully handle shutdowns on Windows

This commit is contained in:
Neil Alexander 2019-07-06 11:52:30 +01:00
parent b2607a7205
commit 12486b0557
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
4 changed files with 32 additions and 7 deletions

View file

@ -98,6 +98,9 @@ func (tun *TunAdapter) writer() error {
util.PutBytes(b)
}
if err != nil {
if !tun.isOpen {
return err
}
tun.log.Errorln("TUN/TAP iface write error:", err)
continue
}
@ -114,6 +117,9 @@ func (tun *TunAdapter) reader() error {
// Wait for a packet to be delivered to us through the TUN/TAP adapter
n, err := tun.iface.Read(bs)
if err != nil {
if !tun.isOpen {
return err
}
panic(err)
}
if n == 0 {

View file

@ -181,6 +181,16 @@ func (tun *TunAdapter) Start() error {
return nil
}
// Start the setup process for the TUN/TAP adapter. If successful, starts the
// read/write goroutines to handle packets on that interface.
func (tun *TunAdapter) Stop() error {
tun.isOpen = false
// TODO: we have nothing that cleanly stops all the various goroutines opened
// by TUN/TAP, e.g. readers/writers, sessions
tun.iface.Close()
return nil
}
// UpdateConfig updates the TUN/TAP module with the provided config.NodeConfig
// and then signals the various module goroutines to reconfigure themselves if
// needed.