🤖 AI Summary
This study addresses the challenge that local deadlocks in Go programs are difficult to detect and lack automated repair mechanisms. To this end, this work proposes a fully automated approach encompassing both deadlock detection and repair. The method leverages a message-passing intermediate representation combined with symbolic analysis techniques to precisely identify both global and local deadlocks, and employs source code transformation algorithms to automatically generate repair patches. Experimental results demonstrate that the proposed tool achieves deadlock detection performance comparable to existing state-of-the-art tools. Furthermore, it realizes the first automated repair of local deadlocks, thereby filling a critical technical gap in this domain.
📝 Abstract
The Go programming language provides a lightweight abstraction for concurrent programming through goroutines, which are prone to deadlocks. Go includes a runtime detector that aborts execution when all threads are blocked (a global deadlock). However, due to nondeterministic thread scheduling, this runtime mechanism only detects global deadlocks that manifest during execution and cannot identify partial deadlocks, where a subset of goroutines is permanently blocked while at least one remains runnable. Statically detecting local deadlocks is essential for developing dependable concurrent software.
While several tools statically detect deadlocks in concurrent programs, few assist developers in fixing them. Detecting and resolving partial deadlocks requires reasoning about complex interleavings and communication patterns, an inherently challenging task.
In this paper, we present GoDDaR, a tool that detects unobserved global or partial deadlocks in Go programs and suggests concrete fixes. GoDDaR translates Go source code into an intermediate representation reflecting message-passing communication events and composition patterns. Partial deadlocks are identified through symbolic analysis over this representation. To resolve detected deadlocks, our algorithms transform the intermediate representation to eliminate problematic synchronization patterns, allowing GoDDaR to generate fix suggestions for the original Go source code as a diff.
We evaluate GoDDaR on a benchmark suite of representative deadlock examples from literature and git repositories to validate algorithm correctness and compare performance against the state of the art. Results demonstrate that GoDDaR is competitive with top approaches in partial deadlock detection and advances the state of the art in automated deadlock fixing.