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