kirancodes.me
To Proof Maintenance & Beyond!

Fixing deadlocks via lock pre-acquisitions

Yan Cai, Lingwei Cao

Abstract

Manual deadlock fixing is error-prone and time-consuming. Existing generic approach (GA) simply inserts gate locks to fix deadlocks by serializing executions, which could introduce various new deadlocks and incur high runtime overhead. We propose a novel approach DFixer to fix deadlocks without introducing any new deadlocks by design. DFixer only selects one thread of a deadlock to pre-acquire a lock w together with another lock h, where before fixing, the deadlock occurs when the thread holds lock h and waits for lock w. As such, DFixer eliminates a hold-and-wait necessary condition, preventing the deadlock from occurring. The thread performing pre-acquisition is carefully selected such that no other synchronization exists in between the two original acquisitions. Otherwise, DFixer further introduces a context-aware conditional protected by above lock w to guarantee the correctness of DFixer. The evaluation is on 20 deadlocks, including 17 from widely-used real-world C/C++ programs. It shows that DFixer successfully fixed all deadlocks. Whereas GA introduced 9 new deadlocks; a latest work Grail failed to fix 8 deadlocks and introduced 3 new deadlocks on others. On average, DFixer incurred only 2.1% overhead, where GA and Grail incurred 15.8% and 11.5% overhead, respectively.

BibTeX
@inproceedings{Cai-Cao:ICSE16,
  author    = {Yan Cai and
               Lingwei Cao},
  title     = {Fixing deadlocks via lock pre-acquisitions},
  booktitle = {ICSE},
  pages     = {1109--1120},
  publisher = {{ACM}},
  year      = {2016},
}

Related papers