  Implementing bug-free concurrent programs is a challenging task in modern
software development. State-of-the-art static analyses find hundreds of
concurrency bugs in production code, scaling to large codebases. Yet, fixing
these bugs in constantly changing codebases represents a daunting effort for
programmers, particularly because a fix in the concurrent code can introduce
other bugs in a subtle way.
  In this work, we show how to harness compositional static analysis for
concurrency bug detection, to enable a new Automated Program Repair (APR)
technique for data races in large concurrent Java codebases. The key innovation
of our work is an algorithm that translates procedure summaries inferred by the
analysis tool for the purpose of bug reporting, into small local patches that
fix concurrency bugs (without introducing new ones). This synergy makes it
possible to extend the virtues of compositional static concurrency analysis to
APR, making our approach effective (it can detect and fix many more bugs than
existing tools for data race repair), scalable (it takes seconds to analyse and
suggest fixes for sizeable codebases), and usable (generally, it does not
require annotations from the users and can perform continuous automated
repair). Our study conducted on popular open-source projects has confirmed that
our tool automatically produces concurrency fixes similar to those proposed by
the developers in the past.
