diff options
| author | Paul Buetow <paul@buetow.org> | 2026-02-25 22:58:40 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-02-25 22:58:40 +0200 |
| commit | 4c34b9efcd539c819648c927d7e3f53220df8ad2 (patch) | |
| tree | f9de9fd650a2d16316ba2c159990d891c9de5189 /internal/probemanager | |
| parent | 67e10f34c92e93343adbd690b3b21e455e863bd3 (diff) | |
Fix stream paused scrolling and apply pending TUI/probe updates
Diffstat (limited to 'internal/probemanager')
| -rw-r--r-- | internal/probemanager/manager.go | 16 | ||||
| -rw-r--r-- | internal/probemanager/manager_test.go | 26 |
2 files changed, 42 insertions, 0 deletions
diff --git a/internal/probemanager/manager.go b/internal/probemanager/manager.go index 65dd52b..b991c7c 100644 --- a/internal/probemanager/manager.go +++ b/internal/probemanager/manager.go @@ -260,6 +260,22 @@ func (m *Manager) ActiveCount() (active, total int) { return active, total } +// IsActive reports whether the syscall probe is currently active. +func (m *Manager) IsActive(syscall string) bool { + if m == nil || syscall == "" { + return false + } + + m.mu.Lock() + defer m.mu.Unlock() + + entry, ok := m.probes[syscall] + if !ok { + return false + } + return entry.active +} + func (m *Manager) Close() error { if m == nil { return nil diff --git a/internal/probemanager/manager_test.go b/internal/probemanager/manager_test.go index 1fcce6d..b000ced 100644 --- a/internal/probemanager/manager_test.go +++ b/internal/probemanager/manager_test.go @@ -214,3 +214,29 @@ func TestManagerAttachAllPicksUpNewTracepointsOnLaterCall(t *testing.T) { t.Fatalf("unexpected syscall ordering/content: %+v", states) } } + +func TestManagerIsActiveReflectsCurrentState(t *testing.T) { + attacher := &fakeAttacher{ + programs: map[string]*fakeProgram{ + "handle_sys_enter_read": {}, + "handle_sys_exit_read": {}, + }, + errs: map[string]error{}, + } + mgr := NewManager(attacher) + if err := mgr.AttachAll(nil, []string{"sys_enter_read", "sys_exit_read"}); err != nil { + t.Fatalf("AttachAll returned error: %v", err) + } + if !mgr.IsActive("read") { + t.Fatalf("expected read to be active") + } + if err := mgr.Detach("read"); err != nil { + t.Fatalf("Detach returned error: %v", err) + } + if mgr.IsActive("read") { + t.Fatalf("expected read to be inactive after detach") + } + if mgr.IsActive("does_not_exist") { + t.Fatalf("expected unknown syscall to be inactive") + } +} |
