summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-10 22:35:52 +0200
committerPaul Buetow <paul@buetow.org>2026-03-10 22:35:52 +0200
commit064d967df9629acd16a5c1cd3a1007e22071f86c (patch)
treea9433a5e27cc8c4b777a0b6d4c87d26485bb485d /internal
parent80d8993dca4cf7945c492406489fb9d966e2dc44 (diff)
eventloop: avoid fmt.Sprintf in proc comm lookup (task 426)
Diffstat (limited to 'internal')
-rw-r--r--internal/eventloop.go11
-rw-r--r--internal/eventloop_seed_test.go6
2 files changed, 14 insertions, 3 deletions
diff --git a/internal/eventloop.go b/internal/eventloop.go
index 27b48e7..4b4c0c0 100644
--- a/internal/eventloop.go
+++ b/internal/eventloop.go
@@ -9,6 +9,7 @@ import (
"path/filepath"
"reflect"
"sort"
+ "strconv"
"sync"
"syscall"
"time"
@@ -1210,9 +1211,13 @@ func (e *eventLoop) queueCommLookup(tid uint32) {
e.commState().queueLookup(tid)
}
+func procTidPathPrefix(tid uint32) string {
+ return "/proc/" + strconv.FormatUint(uint64(tid), 10)
+}
+
func resolveCommFromProc(tid uint32) string {
- commPath := fmt.Sprintf("/proc/%d/comm", tid)
- if data, err := os.ReadFile(commPath); err == nil {
+ procPath := procTidPathPrefix(tid)
+ if data, err := os.ReadFile(procPath + "/comm"); err == nil {
comm := string(data)
if len(comm) > 0 && comm[len(comm)-1] == '\n' {
comm = comm[:len(comm)-1]
@@ -1221,7 +1226,7 @@ func resolveCommFromProc(tid uint32) string {
return comm
}
}
- if linkName, err := os.Readlink(fmt.Sprintf("/proc/%d/exe", tid)); err == nil {
+ if linkName, err := os.Readlink(procPath + "/exe"); err == nil {
linkName = filepath.Base(linkName)
return linkName
}
diff --git a/internal/eventloop_seed_test.go b/internal/eventloop_seed_test.go
index 427869e..f960133 100644
--- a/internal/eventloop_seed_test.go
+++ b/internal/eventloop_seed_test.go
@@ -5,6 +5,12 @@ import (
"testing"
)
+func TestProcTidPathPrefix(t *testing.T) {
+ if got, want := procTidPathPrefix(42), "/proc/42"; got != want {
+ t.Fatalf("procTidPathPrefix() = %q, want %q", got, want)
+ }
+}
+
func TestSeedTrackedPidCommCachesTrackedPidComm(t *testing.T) {
pid := uint32(os.Getpid())
want := resolveCommFromProc(pid)