When closing a device, packets that are in flight
can make it to SendBuffer, which then returns an error.
Those errors add noise but no light;
they do not reflect an actual problem.
Adding the synchronization required to prevent
this from occurring is currently expensive and error-prone.
Instead, quietly drop such packets instead of
returning an error.
Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
defer peer.device.net.RUnlock()
if peer.device.net.bind == nil {
+ // Packets can leak through to SendBuffer while the device is closing.
+ // When that happens, drop them silently to avoid spurious errors.
+ if peer.device.isClosed.Get() {
+ return nil
+ }
return errors.New("no bind")
}