From: Jason Ekstrand Date: Wed, 27 Mar 2019 15:13:28 +0000 (-0500) Subject: nir: Lock around validation fail shader dumping X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7dbd934e269e80941b2d73e4b405a151a1145a21;p=mesa.git nir: Lock around validation fail shader dumping This prevents getting mixed-up results if a multi-threaded app has two validation errors in different threads. Reviewed-by: Timothy Arceri --- diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c index 80f397098a2..5f812974720 100644 --- a/src/compiler/nir/nir_validate.c +++ b/src/compiler/nir/nir_validate.c @@ -26,6 +26,7 @@ */ #include "nir.h" +#include "c11/threads.h" #include /* @@ -1180,11 +1181,18 @@ destroy_validate_state(validate_state *state) _mesa_hash_table_destroy(state->errors, NULL); } +mtx_t fail_dump_mutex = _MTX_INITIALIZER_NP; + static void dump_errors(validate_state *state, const char *when) { struct hash_table *errors = state->errors; + /* Lock around dumping so that we get clean dumps in a multi-threaded + * scenario + */ + mtx_lock(&fail_dump_mutex); + if (when) { fprintf(stderr, "NIR validation failed %s\n", when); fprintf(stderr, "%d errors:\n", _mesa_hash_table_num_entries(errors)); @@ -1203,6 +1211,8 @@ dump_errors(validate_state *state, const char *when) } } + mtx_unlock(&fail_dump_mutex); + abort(); }