Rewrite timers and related state machines

This commit is contained in:
Jason A. Donenfeld
2018-05-07 22:27:03 +02:00
parent 375dcbd4ae
commit 233f079a94
14 changed files with 453 additions and 602 deletions

View File

@@ -74,8 +74,8 @@ type Device struct {
handshake chan QueueHandshakeElement
}
signal struct {
stop Signal
signals struct {
stop chan struct{}
}
tun struct {
@@ -302,7 +302,7 @@ func NewDevice(tun TUNDevice, logger *Logger) *Device {
// prepare signals
device.signal.stop = NewSignal()
device.signals.stop = make(chan struct{}, 1)
// prepare net
@@ -400,7 +400,7 @@ func (device *Device) Close() {
device.isUp.Set(false)
device.signal.stop.Broadcast()
close(device.signals.stop)
device.state.stopping.Wait()
device.FlushPacketQueues()
@@ -413,5 +413,5 @@ func (device *Device) Close() {
}
func (device *Device) Wait() chan struct{} {
return device.signal.stop.Wait()
return device.signals.stop
}