Deterministic dynamic race detection across program versions
Abstract
Dynamic race detectors operate by analyzing execution traces of programs to detect races
in multithreaded programs. As the thread interleavings influence these traces, the sets
of races detected across multiple runs of the detector can vary. This non-determinism
without any change in program source and input can reduce programmer confidence in
using the detector. Prom an organizational perspective, a defect needs to be reported
consistently until it is fixed. Non-determinism complicates the work flow and the problem
is further exacerbated with modifications to the program.
In this thesis, we propose a framework for deterministic dynamic race detection that
ensures detection of races until they are fixed, even across program versions. The design
attempts to preserve the racy behavior with changes to the program source that include
addition (and deletion) of locks and shared memory accesses. We record, transform and
replay the schedules across program versions intelligently to achieve this goal.
We have implemented a framework, named STABLER, and evaluated our ideas by
applying popular race detectors (D J IT +, F a s t T ra c k ) on different versions of many
open-source multithreaded J a v a programs. Our experimental results show that we are
able to detect all the unfixed races consistently across major releases of the program. For
both the detectors, the maximum incurred slowdown, with our framework, for record and
replay is 1.2x and 2.29x respectively. We also perform user experiments where volunteers
fixed a significant number of races. In spite of these changes, our framework is effective
in its ability to detect all the unfixed races

