Detecting potential deadlocks with static analysis and run-time monitoring

  • Authors:
  • Rahul Agarwal;Liqiang Wang;Scott D. Stoller

  • Affiliations:
  • Computer Science Dept., SUNY at Stony Brook, Stony Brook, NY;Computer Science Dept., SUNY at Stony Brook, Stony Brook, NY;Computer Science Dept., SUNY at Stony Brook, Stony Brook, NY

  • Venue:
  • HVC'05 Proceedings of the First Haifa international conference on Hardware and Software Verification and Testing
  • Year:
  • 2005

Quantified Score

Hi-index 0.00

Visualization

Abstract

Concurrent programs are notorious for containing errors that are difficult to reproduce and diagnose. A common kind of concurrency error is deadlock, which occurs when a set of threads is blocked each trying to acquire a lock held by another thread in that set. Static and dynamic (run-time) analysis techniques exist to detect deadlocks. Havelund's GoodLock algorithm detects potential deadlocks at run-time. However, it detects only potential deadlocks involving exactly two threads. This paper presents a generalized version of the GoodLock algorithm that detects potential deadlocks involving any number of threads. Run-time checking may miss errors in unexecuted code. On the positive side, run-time checking generally produces fewer false alarms than static analysis. This paper explores the use of static analysis to automatically reduce the overhead of run-time checking. We extend our type system, Extended Parameterized Atomic Java (EPAJ), which ensures absence of races and atomicity violations, with Boyapati et al.'s deadlock types. We give an algorithm that infers deadlock types for a given program and an algorithm that determines, based on the result of type inference, which run-time checks can safely be omitted. The new type system, called Deadlock-Free EPAJ (DEPAJ), has the added benefit of giving stronger atomicity guarantees than previous atomicity type systems.