Browse Source

lib/stun: Inline util.OnDone, comment on its purpose (#7308)

Co-authored-by: greatroar <@>
greatroar 4 years ago
parent
commit
8b86171642
2 changed files with 6 additions and 9 deletions
  1. 6 1
      lib/stun/stun.go
  2. 0 8
      lib/util/utils.go

+ 6 - 1
lib/stun/stun.go

@@ -111,7 +111,12 @@ func (s *Service) Serve(ctx context.Context) error {
 		s.setExternalAddress(nil, "")
 	}()
 
-	util.OnDone(ctx, func() { _ = s.stunConn.Close() })
+	// Closing s.stunConn unblocks operations that use the connection
+	// (Discover, Keepalive) and might otherwise block us from returning.
+	go func() {
+		<-ctx.Done()
+		_ = s.stunConn.Close()
+	}()
 
 	timer := time.NewTimer(time.Millisecond)
 

+ 0 - 8
lib/util/utils.go

@@ -250,14 +250,6 @@ func AddressUnspecifiedLess(a, b net.Addr) bool {
 	return aIsUnspecified
 }
 
-// OnDone calls fn when ctx is cancelled.
-func OnDone(ctx context.Context, fn func()) {
-	go func() {
-		<-ctx.Done()
-		fn()
-	}()
-}
-
 func CallWithContext(ctx context.Context, fn func() error) error {
 	var err error
 	done := make(chan struct{})