diff options
| author | Ben Sima <ben@bsima.me> | 2025-11-15 12:52:26 -0500 |
|---|---|---|
| committer | Ben Sima <ben@bsima.me> | 2025-11-15 12:52:26 -0500 |
| commit | 7384d1297dbf6929063e6d3f15f7903a4d20e5ef (patch) | |
| tree | 25fadc022571eb8938deca4ce5366b27c9bdb55f /AGENTS.md | |
| parent | b3dd5f285365f59153a8f4549efa0607ccddf19d (diff) | |
Fix segfault: add mutex for ANSI terminal operations
Problem: Intermittent segfaults when running `bild --time 0 **/*` with
many concurrent builds. Core dumps showed crashes in libncursesw's
free() function during terminal cleanup.
Root cause: ANSI.getTerminalSize and other ANSI terminal library
calls are not thread-safe. With mapConcurrentlyBounded running up to
8 analyses concurrently, multiple threads were calling ANSI functions
simultaneously, causing memory corruption in the ncurses library.
Solution: Add global MVar terminalLock to serialize all ANSI terminal
operations. Wrap all ANSI function calls (cursor movement, line
clearing, etc.) with withMVar terminalLock.
Changes: - Add terminalLock :: MVar () in Omni/Log/Concurrent.hs -
Wrap all ANSI calls in withMVar terminalLock:
- initializeLines: cursor column, clear line - updateLine: cursor
up/down, column set, clear line - updateLineState: cursor up/down,
column set, clear line - withLineManager: cursor up
Tested: 5 consecutive runs of `bild --time 0 **/*` complete without
segfaults (previously failed 1-2 out of 3 runs).
Diffstat (limited to 'AGENTS.md')
0 files changed, 0 insertions, 0 deletions
