Lightweight and Modular Resource Leak Verification Martin Kellogg∗ Narges Shadab∗ Manu Sridharan Michael D. Ernst University of Washington, University of California, University of California, University of Washington, Seattle, USA Riverside, USA Riverside, USA Seattle, USA
[email protected] [email protected] [email protected] [email protected] ABSTRACT 1 INTRODUCTION A resource leak occurs when a program allocates a resource, such as A resource leak occurs when some finite resource managed by the a socket or file handle, but fails to deallocate it. Resource leaks cause programmer is not explicitly disposed of. In an unmanaged lan- resource starvation, slowdowns, and crashes. Previous techniques to guage like C, that explicit resource might be memory; in a managed prevent resource leaks are either unsound, imprecise, inapplicable language like Java, it might be a file descriptor, a socket, or a data- to existing code, slow, or a combination of these. base connection. Resource leaks continue to cause severe failures, Static detection of resource leaks requires checking that de- even in modern, heavily-used Java applications [15]. This state- allocation methods are always invoked on relevant objects before of-the-practice does not differ much from two decades ago [35]. they become unreachable. Our key insight is that leak detection can Microsoft engineers consider resource leaks to be one of the most be reduced to an accumulation problem, a class of typestate prob- significant development challenges22 [ ]. Preventing resource leaks lems amenable to sound and modular checking without the need remains an urgent, difficult, open problem. for a heavyweight, whole-program alias analysis.