diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-01-26 07:02:20 -1000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-01-26 07:02:20 -1000 |
| commit | ff7339acfdf533110f3ab1f902e153df739eed1b (patch) | |
| tree | 2a3328ef0dee299fee52947ef0a8d08fb68f017d /internal/api/trello.go | |
| parent | 8c2c88f90039e87b29ce32cd31b7b0361b5803d0 (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.go | 5 |
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) } |
