diff options
| author | Feoramund <161657516+Feoramund@users.noreply.github.com> | 2024-04-28 14:03:11 -0400 |
|---|---|---|
| committer | Feoramund <161657516+Feoramund@users.noreply.github.com> | 2024-04-28 14:03:11 -0400 |
| commit | f1c13d6bd8ad7390ba29d5d6de79596b9b53bf24 (patch) | |
| tree | 4f79521c855633a5c6926ca42ff1b5c033ede853 /src/error.cpp | |
| parent | a37826e646c4c88974fad9a9ff1749e55dc7f52f (diff) | |
Fix race condition in `error_va`
If the error count exceeded `MAX_ERROR_COLLECTOR_COUNT`, multiple
threads could print and exit simultaneously, causing a segfault.
This change moves the mutex lock back before the conditional.
Diffstat (limited to 'src/error.cpp')
| -rw-r--r-- | src/error.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/error.cpp b/src/error.cpp index bbbb98053..1b091f88e 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -376,11 +376,11 @@ gb_internal void error_out_coloured(char const *str, TerminalStyle style, Termin gb_internal void error_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) { global_error_collector.count.fetch_add(1); + mutex_lock(&global_error_collector.mutex); if (global_error_collector.count > MAX_ERROR_COLLECTOR_COUNT()) { print_all_errors(); gb_exit(1); } - mutex_lock(&global_error_collector.mutex); push_error_value(pos, ErrorValue_Error); // NOTE(bill): Duplicate error, skip it |