File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -44,16 +44,16 @@ func (s *Server) Start(ctx context.Context) error {
4444
4545 handler := & dnsHandler {store : s .store }
4646
47- var udpReady , tcpReady sync. WaitGroup
48- udpReady . Add ( 1 )
49- tcpReady . Add ( 1 )
47+ udpReady := make ( chan struct {})
48+ tcpReady := make ( chan struct {} )
49+ errChan := make ( chan error , 2 )
5050
5151 s .udpServer = & dns.Server {
5252 Addr : addr ,
5353 Net : "udp" ,
5454 Handler : handler ,
5555 NotifyStartedFunc : func () {
56- udpReady . Done ( )
56+ close ( udpReady )
5757 },
5858 }
5959
@@ -62,12 +62,10 @@ func (s *Server) Start(ctx context.Context) error {
6262 Net : "tcp" ,
6363 Handler : handler ,
6464 NotifyStartedFunc : func () {
65- tcpReady . Done ( )
65+ close ( tcpReady )
6666 },
6767 }
6868
69- errChan := make (chan error , 2 )
70-
7169 go func () {
7270 if err := s .udpServer .ListenAndServe (); err != nil {
7371 select {
@@ -86,13 +84,17 @@ func (s *Server) Start(ctx context.Context) error {
8684 }
8785 }()
8886
89- udpReady .Wait ()
90- tcpReady .Wait ()
91-
92- select {
93- case err := <- errChan :
94- return err
95- default :
87+ for i := 0 ; i < 2 ; i ++ {
88+ select {
89+ case <- udpReady :
90+ udpReady = nil
91+ case <- tcpReady :
92+ tcpReady = nil
93+ case err := <- errChan :
94+ return err
95+ case <- ctx .Done ():
96+ return ctx .Err ()
97+ }
9698 }
9799
98100 s .started .Store (true )
You can’t perform that action at this time.
0 commit comments