path: root/color.c
diff options
authorMartin Ågren <>2017-08-21 17:43:48 (GMT)
committerJunio C Hamano <>2017-08-23 17:38:56 (GMT)
commit6cdf8a7929688ea5702ab53f450d038e973e64e1 (patch)
tree6bc1c2972542be1c7ada97faefa345278b582c7e /color.c
parent65961d5a75e28aa04a90ee65106f71da177fd4b3 (diff)
ThreadSanitizer: add suppressions
Add a file .tsan-suppressions and list two functions in it: want_color() and transfer_debug(). Both of these use the pattern static int foo = -1; if (foo < 0) foo = bar(); where bar always returns the same non-negative value. This can cause ThreadSanitizer to diagnose a race when foo is written from two threads. That is indeed a race, although it arguably doesn't matter in practice since it's always the same value that is written. Add NEEDSWORK-comments to the functions so that this problem is not forever swept way under the carpet. The suppressions-file is used by setting the environment variable TSAN_OPTIONS to, e.g., "suppressions=$(pwd)/.tsan-suppressions". Observe that relative paths such as ".tsan-suppressions" might not work. Signed-off-by: Martin Ågren <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'color.c')
1 files changed, 7 insertions, 0 deletions
diff --git a/color.c b/color.c
index 31b6207..9a9261a 100644
--- a/color.c
+++ b/color.c
@@ -338,6 +338,13 @@ static int check_auto_color(void)
int want_color(int var)
+ /*
+ * NEEDSWORK: This function is sometimes used from multiple threads, and
+ * we end up using want_auto racily. That "should not matter" since
+ * we always write the same value, but it's still wrong. This function
+ * is listed in .tsan-suppressions for the time being.
+ */
static int want_auto = -1;
if (var < 0)