mirror of
https://github.com/tailscale/tailscale.git
synced 2025-08-22 02:50:42 +00:00
portlist: update some internals to use append-style APIs
In prep for reducing garbage, being able to reuse memory. So far this doesn't actually reuse much. This is just changing signatures around. But some improvement in any case: bradfitz@tsdev:~/src/tailscale.com$ ~/go/bin/benchstat before after name old time/op new time/op delta GetList-8 11.8ms ± 9% 9.9ms ± 3% -15.98% (p=0.000 n=10+10) name old alloc/op new alloc/op delta GetList-8 99.5kB ± 2% 91.9kB ± 0% -7.62% (p=0.000 n=9+9) name old allocs/op new allocs/op delta GetList-8 3.05k ± 1% 2.93k ± 0% -3.83% (p=0.000 n=8+9) More later, once parsers can reuse strings from previous parses. Updates #5958 Change-Id: I76cd5048246dd24d11c4e263d8bb8041747fb2b0 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:

committed by
Brad Fitzpatrick

parent
67597bfc9e
commit
46ce80758d
@@ -55,7 +55,7 @@ type nothing struct{}
|
||||
// formats that we can parse without special detection logic.
|
||||
// Unfortunately, options to filter by proto or state are non-portable,
|
||||
// so we'll filter for ourselves.
|
||||
func parsePortsNetstat(output string) List {
|
||||
func appendParsePortsNetstat(base []Port, output string) []Port {
|
||||
m := map[Port]nothing{}
|
||||
lines := strings.Split(string(output), "\n")
|
||||
|
||||
@@ -131,13 +131,18 @@ func parsePortsNetstat(output string) List {
|
||||
lastline = ""
|
||||
}
|
||||
|
||||
l := []Port{}
|
||||
ret := base
|
||||
for p := range m {
|
||||
l = append(l, p)
|
||||
ret = append(ret, p)
|
||||
}
|
||||
sort.Slice(l, func(i, j int) bool {
|
||||
return (&l[i]).lessThan(&l[j])
|
||||
|
||||
// Only sort the part we appended. It's up to the caller to sort the whole
|
||||
// thing if they'd like. In practice the caller's base will have len 0,
|
||||
// though, so the whole thing will be sorted.
|
||||
toSort := ret[len(base):]
|
||||
sort.Slice(toSort, func(i, j int) bool {
|
||||
return (&toSort[i]).lessThan(&toSort[j])
|
||||
})
|
||||
|
||||
return l
|
||||
return ret
|
||||
}
|
||||
|
Reference in New Issue
Block a user