lib/nat: Make service termination faster (#6777)

* lib/nat: Make service termination faster

* Newline
This commit is contained in:
Audrius Butkevicius
2020-06-22 09:01:57 +01:00
committed by GitHub
parent aee4b10d3a
commit cbaef624cf
2 changed files with 36 additions and 16 deletions
+23 -12
View File
@@ -119,19 +119,26 @@ func Discover(ctx context.Context, renewal, timeout time.Duration) []nat.Device
}()
seenResults := make(map[string]bool)
for result := range resultChan {
if seenResults[result.ID()] {
l.Debugf("Skipping duplicate result %s", result.ID())
continue
for {
select {
case result, ok := <-resultChan:
if !ok {
return results
}
if seenResults[result.ID()] {
l.Debugf("Skipping duplicate result %s", result.ID())
continue
}
results = append(results, result)
seenResults[result.ID()] = true
l.Debugf("UPnP discovery result %s", result.ID())
case <-ctx.Done():
return nil
}
results = append(results, result)
seenResults[result.ID()] = true
l.Debugf("UPnP discovery result %s", result.ID())
}
return results
}
// Search for UPnP InternetGatewayDevices for <timeout> seconds.
@@ -213,7 +220,11 @@ loop:
}
for _, igd := range igds {
igd := igd // Copy before sending pointer to the channel.
results <- &igd
select {
case results <- &igd:
case <-ctx.Done():
return
}
}
}
l.Debugln("Discovery for device type", deviceType, "on", intf.Name, "finished.")