summaryrefslogtreecommitdiff
path: root/internal/api/trello.go
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-01-26 07:02:20 -1000
committerPeter Stone <thepeterstone@gmail.com>2026-01-26 07:02:20 -1000
commitff7339acfdf533110f3ab1f902e153df739eed1b (patch)
tree2a3328ef0dee299fee52947ef0a8d08fb68f017d /internal/api/trello.go
parent8c2c88f90039e87b29ce32cd31b7b0361b5803d0 (diff)
Phase 2: Fix data race in GetBoardsWithCards
Add mutex synchronization for writes to board slice elements (Cards and Lists fields) from concurrent goroutines. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'internal/api/trello.go')
-rw-r--r--internal/api/trello.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/internal/api/trello.go b/internal/api/trello.go
index a19bbea..67ffad0 100644
--- a/internal/api/trello.go
+++ b/internal/api/trello.go
@@ -169,6 +169,7 @@ func (c *TrelloClient) GetBoardsWithCards(ctx context.Context) ([]models.Board,
}
var wg sync.WaitGroup
+ var mu sync.Mutex // Protects writes to boards slice elements
sem := make(chan struct{}, 5) // Limit to 5 concurrent requests
for i := range boards {
@@ -186,14 +187,18 @@ func (c *TrelloClient) GetBoardsWithCards(ctx context.Context) ([]models.Board,
for j := range cards {
cards[j].BoardName = boards[i].Name
}
+ mu.Lock()
boards[i].Cards = cards
+ mu.Unlock()
}
lists, err := c.getLists(ctx, boards[i].ID)
if err != nil {
log.Printf("Error fetching lists for board %s: %v", boards[i].Name, err)
} else {
+ mu.Lock()
boards[i].Lists = lists
+ mu.Unlock()
}
}(i)
}