summaryrefslogtreecommitdiff
path: root/internal/probemanager/manager.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-18 13:20:58 +0300
committerPaul Buetow <paul@buetow.org>2026-04-18 13:20:58 +0300
commit6c66afc7e4fbabc42c2df832c31d9380e3e68eac (patch)
tree2debe32e4a3349f93aa63da572ce7c85c3d7b2a1 /internal/probemanager/manager.go
parent550f064f95113e072677b871b7de30ecf25d62b8 (diff)
fix probemanager attach race for task 55
Diffstat (limited to 'internal/probemanager/manager.go')
-rw-r--r--internal/probemanager/manager.go25
1 files changed, 25 insertions, 0 deletions
diff --git a/internal/probemanager/manager.go b/internal/probemanager/manager.go
index cad755e..bb6d44d 100644
--- a/internal/probemanager/manager.go
+++ b/internal/probemanager/manager.go
@@ -38,6 +38,7 @@ type probeEntry struct {
enterLink Link
exitLink Link
+ attachMu sync.Mutex
active bool
lastErr error
@@ -144,6 +145,20 @@ func (m *Manager) Attach(syscall string) error {
exitTP := entry.exitTP
attacher := m.attacher
m.mu.Unlock()
+ entry.attachMu.Lock()
+ defer entry.attachMu.Unlock()
+
+ m.mu.Lock()
+ entry, err = m.entryLocked(syscall)
+ if err != nil {
+ m.mu.Unlock()
+ return err
+ }
+ if entry.active {
+ m.mu.Unlock()
+ return nil
+ }
+ m.mu.Unlock()
enterLink, exitLink, attachErr := attachPair(attacher, enterTP, exitTP)
@@ -183,6 +198,16 @@ func (m *Manager) Detach(syscall string) error {
m.mu.Unlock()
return err
}
+ m.mu.Unlock()
+ entry.attachMu.Lock()
+ defer entry.attachMu.Unlock()
+
+ m.mu.Lock()
+ entry, err = m.entryLocked(syscall)
+ if err != nil {
+ m.mu.Unlock()
+ return err
+ }
enterLink := entry.enterLink
exitLink := entry.exitLink
m.mu.Unlock()