package node import ( "context" "sync" ) type runHandle struct { runID string adapter string target string sessionID string cancel context.CancelFunc done chan struct{} } type runManager struct { mu sync.RWMutex runs map[string]*runHandle } func newRunManager() *runManager { return &runManager{runs: make(map[string]*runHandle)} } func (m *runManager) register(h *runHandle) { m.mu.Lock() defer m.mu.Unlock() m.runs[h.runID] = h } func (m *runManager) deregister(runID string) { m.mu.Lock() defer m.mu.Unlock() delete(m.runs, runID) } func (m *runManager) cancelRun(runID string) bool { m.mu.RLock() h, ok := m.runs[runID] m.mu.RUnlock() if !ok { return false } h.cancel() return true }