sink := make(chan []byte)
sinkReady := make(chan struct{})
sinkTerminate := make(chan struct{})
+ sinkSkip := make(chan struct{})
go func() {
heartbeat := time.Tick(heartbeatPeriodGet())
case <-heartbeat:
go func() { sink <- make([]byte, 0) }()
continue
+ case <-sinkSkip:
case <-sinkReady:
- if exists {
- exists = false
- break
- }
tap.ready <- struct{}{}
+ tap.synced = true
}
HeartbeatCatched:
select {
case <-sinkTerminate:
break ListenCycle
case pkt = <-tap.sink:
+ tap.synced = false
sink <- pkt
}
}
close(sink)
+ close(sinkReady)
+ close(sinkTerminate)
}()
- sinkReady <- struct{}{}
+ if exists && tap.synced {
+ sinkSkip <- struct{}{}
+ } else {
+ sinkReady <- struct{}{}
+ }
return tap, sink, sinkReady, sinkTerminate, nil
}