Skip to content

Commit c8ccd8c

Browse files
committed
Fix agent crash
1 parent 105946a commit c8ccd8c

1 file changed

Lines changed: 16 additions & 14 deletions

File tree

agent/internal/dns/server.go

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff 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)

0 commit comments

Comments
 (0)