Re: [PATCH/RFC 0/5] Some ThreadSanitizer-results
From: Martin Ågren <hidden>
Date: 2017-08-20 10:45:33
On 20 August 2017 at 12:06, Jeff King [off-list ref] wrote:
On Tue, Aug 15, 2017 at 02:53:00PM +0200, Martin Ågren wrote:quoted
I tried running the test suite on Git compiled with ThreadSanitizer (SANITIZE=thread). Maybe this series could be useful for someone else trying to do the same. I needed the first patch to avoid warnings when compiling, although it actually has nothing to do with threads. The last four patches are about avoiding some issues where ThreadSanitizer complains for reasonable reasons, but which to the best of my understanding are not real problems. These patches could be useful to make "actual" problems stand out more. Of course, if no-one ever runs ThreadSanitizer, they are of little to no (or even negative) value...I think it's a chicken-and-egg. I'd love to run the test suite with tsan from time to time, but there's no point if it turns up a bunch of false positives. The general direction here looks good to me (and I agree with the comments made so far, especially that we should stop writing to strbuf_slopbuf entirely).quoted
ThreadSanitizer: add suppressionsThis one is the most interesting because it really is just papering over the issues. I "solved" the transfer_debug one with actual code in: https://public-inbox.org/git/20170710133040.yom65mjol3nmf2it@sigill.intra.peff.net/
Hmm, I did search for related posts, but obviously not good enough. Sorry that I missed this.
but it just feels really dirty. I'd be inclined to go with suppressions for now until somebody can demonstrate or argue for an actual breakage (just because it makes the tool more useful for finding _real_ problems).
I actually had a more intrusive version of my patch, but which I didn't send, where I extracted transport_debug_enabled() exactly like that, except I did it in order to minimize the scope of the suppression. In the end, I figured the scope was already small enough. The obvious risk of introducing any kind of "temporary" suppression is that it remains forever... :-) I think I'll add a couple of NEEDSWORK in the code to make it a bit more likely that someone stumbles over the problem and addresses it. Thanks.