mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-29 04:55:31 +00:00
portlist: reuse bufio.Reader between files
name old time/op new time/op delta ListPorts-6 1.18ms ± 5% 1.16ms ± 5% ~ (p=0.075 n=10+10) name old alloc/op new alloc/op delta ListPorts-6 27.2kB ± 0% 14.9kB ± 0% -45.14% (p=0.001 n=8+9) name old allocs/op new allocs/op delta ListPorts-6 90.0 ± 0% 84.0 ± 0% -6.67% (p=0.000 n=10+10) Updates tailscale/corp#2566 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
5a9d977c78
commit
61f201f33d
@ -40,8 +40,9 @@ func listPorts() (List, error) {
|
|||||||
if sawProcNetPermissionErr.Get() {
|
if sawProcNetPermissionErr.Get() {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
l := []Port{}
|
var ret []Port
|
||||||
|
|
||||||
|
var br *bufio.Reader
|
||||||
for _, fname := range sockfiles {
|
for _, fname := range sockfiles {
|
||||||
// Android 10+ doesn't allow access to this anymore.
|
// Android 10+ doesn't allow access to this anymore.
|
||||||
// https://developer.android.com/about/versions/10/privacy/changes#proc-net-filesystem
|
// https://developer.android.com/about/versions/10/privacy/changes#proc-net-filesystem
|
||||||
@ -59,17 +60,19 @@ func listPorts() (List, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("%s: %s", fname, err)
|
return nil, fmt.Errorf("%s: %s", fname, err)
|
||||||
}
|
}
|
||||||
defer f.Close()
|
if br == nil {
|
||||||
r := bufio.NewReader(f)
|
br = bufio.NewReader(f)
|
||||||
|
} else {
|
||||||
ports, err := parsePorts(r, filepath.Base(fname))
|
br.Reset(f)
|
||||||
|
}
|
||||||
|
ports, err := parsePorts(br, filepath.Base(fname))
|
||||||
|
f.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("parsing %q: %w", fname, err)
|
return nil, fmt.Errorf("parsing %q: %w", fname, err)
|
||||||
}
|
}
|
||||||
|
ret = append(ret, ports...)
|
||||||
l = append(l, ports...)
|
|
||||||
}
|
}
|
||||||
return l, nil
|
return ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// fileBase is one of "tcp", "tcp6", "udp", "udp6".
|
// fileBase is one of "tcp", "tcp6", "udp", "udp6".
|
||||||
|
@ -129,3 +129,13 @@ func BenchmarkParsePorts(b *testing.B) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkListPorts(b *testing.B) {
|
||||||
|
b.ReportAllocs()
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
_, err := listPorts()
|
||||||
|
if err != nil {
|
||||||
|
b.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user