From ff7339acfdf533110f3ab1f902e153df739eed1b Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Mon, 26 Jan 2026 07:02:20 -1000 Subject: 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 --- internal/api/trello.go | 5 +++++ 1 file changed, 5 insertions(+) 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) } -- cgit v1.2.3