TUN-2703: Muxer.Serve terminates when its context is Done
This commit is contained in:
parent
a83b6a2155
commit
269351bbea
|
@ -321,24 +321,51 @@ func joinErrorsWithTimeout(errChan <-chan error, receiveCount int, timeout time.
|
||||||
func (m *Muxer) Serve(ctx context.Context) error {
|
func (m *Muxer) Serve(ctx context.Context) error {
|
||||||
errGroup, _ := errgroup.WithContext(ctx)
|
errGroup, _ := errgroup.WithContext(ctx)
|
||||||
errGroup.Go(func() error {
|
errGroup.Go(func() error {
|
||||||
err := m.muxReader.run(m.config.Logger)
|
ch := make(chan error)
|
||||||
m.explicitShutdown.Fuse(false)
|
go func() {
|
||||||
m.r.Close()
|
err := m.muxReader.run(m.config.Logger)
|
||||||
m.abort()
|
m.explicitShutdown.Fuse(false)
|
||||||
return err
|
m.r.Close()
|
||||||
|
m.abort()
|
||||||
|
ch <- err
|
||||||
|
}()
|
||||||
|
select {
|
||||||
|
case err := <-ch:
|
||||||
|
return err
|
||||||
|
case <-ctx.Done():
|
||||||
|
return ctx.Err()
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
errGroup.Go(func() error {
|
errGroup.Go(func() error {
|
||||||
err := m.muxWriter.run(m.config.Logger)
|
ch := make(chan error)
|
||||||
m.explicitShutdown.Fuse(false)
|
go func() {
|
||||||
m.w.Close()
|
err := m.muxWriter.run(m.config.Logger)
|
||||||
m.abort()
|
m.explicitShutdown.Fuse(false)
|
||||||
return err
|
m.w.Close()
|
||||||
|
m.abort()
|
||||||
|
ch <- err
|
||||||
|
}()
|
||||||
|
select {
|
||||||
|
case err := <-ch:
|
||||||
|
return err
|
||||||
|
case <-ctx.Done():
|
||||||
|
return ctx.Err()
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
errGroup.Go(func() error {
|
errGroup.Go(func() error {
|
||||||
err := m.muxMetricsUpdater.run(m.config.Logger)
|
ch := make(chan error)
|
||||||
return err
|
go func() {
|
||||||
|
err := m.muxMetricsUpdater.run(m.config.Logger)
|
||||||
|
ch <- err
|
||||||
|
}()
|
||||||
|
select {
|
||||||
|
case err := <-ch:
|
||||||
|
return err
|
||||||
|
case <-ctx.Done():
|
||||||
|
return ctx.Err()
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
err := errGroup.Wait()
|
err := errGroup.Wait()
|
||||||
|
|
Loading…
Reference in New Issue