wgengine/wgcfg: prevent ReconfigDevice from hanging on error
When wireguard-go's UAPI interface fails with an error, ReconfigDevice hangs.
Fix that by buffering the channel and closing the writer after the call.
The code now matches the corresponding code in DeviceConfig, where I got it right.
@@ -47,9 +47,10 @@ func ReconfigDevice(d *device.Device, cfg *Config, logf logger.Logf) (err error)
}
r, w := io.Pipe()
- errc := make(chan error)
+ errc := make(chan error, 1)
go func() {
errc <- d.IpcSetOperation(r)
+ w.Close()
}()
err = cfg.ToUAPI(w, prev)
