38 lines
718 B
Go
38 lines
718 B
Go
package ai
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
)
|
|
|
|
// ReportManager tracks in-flight report goroutines so they can be cancelled.
|
|
type ReportManager struct {
|
|
mu sync.Mutex
|
|
cancels map[string]context.CancelFunc
|
|
}
|
|
|
|
func NewReportManager() *ReportManager {
|
|
return &ReportManager{cancels: make(map[string]context.CancelFunc)}
|
|
}
|
|
|
|
func (m *ReportManager) Register(id string, cancel context.CancelFunc) {
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
m.cancels[id] = cancel
|
|
}
|
|
|
|
func (m *ReportManager) Cancel(id string) {
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
if cancel, ok := m.cancels[id]; ok {
|
|
cancel()
|
|
delete(m.cancels, id)
|
|
}
|
|
}
|
|
|
|
func (m *ReportManager) Remove(id string) {
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
delete(m.cancels, id)
|
|
}
|