Even though most data races are harmless, the harmful ones are at the heart of some of the worst concurrency bugs. Alas, spotting just the harmful data races in programs is like finding a needle in a haystack. A vast majority of the true data races reported by state-of-the art race detectors turn out to be harmless. Portend is a tool that not only detects races but also automatically classifies them based on their potential consequences: Could they lead to crashes or hangs? Alter system state? Could their effects be visible outside the program? Are they harmless?
Our proposed technique achieves high accuracy by efficiently analyzing multiple paths and multiple thread schedules in combination, and by performing symbolic comparison between program outputs.
We ran Portend on seven real-world applications: it detected 93 true data races and correctly classified 92 of them, with no human effort. Six of them are harmful races. Portend’s classification accuracy is up to 88% higher than that of existing tools, and it produces easy-to-understand evidence of the consequences of harmful races, thus both proving their harmfulness and making debugging easier. We envision Portend being used for testing and debugging, as well as for automatically triaging bug reports.