Skip to content

Commit e5f7cfa

Browse files
authored
Merge pull request #2428 from dgageot/fix1
fix: add mutex lock to AddMessageUsageRecord to prevent data race
2 parents 99f9adb + c006480 commit e5f7cfa

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

pkg/session/session.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,8 @@ func (s *Session) AddMessageUsageRecord(agentName, model string, cost float64, u
472472
if usage == nil {
473473
return
474474
}
475+
s.mu.Lock()
476+
defer s.mu.Unlock()
475477
s.MessageUsageHistory = append(s.MessageUsageHistory, MessageUsageRecord{
476478
AgentName: agentName,
477479
Model: model,

pkg/session/session_race_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package session
2+
3+
import (
4+
"sync"
5+
"testing"
6+
7+
"github.com/docker/docker-agent/pkg/chat"
8+
)
9+
10+
func TestAddMessageUsageRecordConcurrent(t *testing.T) {
11+
s := New()
12+
var wg sync.WaitGroup
13+
for range 100 {
14+
wg.Go(func() {
15+
s.AddMessageUsageRecord("agent", "model", 0.1, &chat.Usage{InputTokens: 10, OutputTokens: 5})
16+
})
17+
}
18+
wg.Wait()
19+
if got := len(s.MessageUsageHistory); got != 100 {
20+
t.Errorf("expected 100 records, got %d", got)
21+
}
22+
}

0 commit comments

Comments
 (0)