From 44392d731d59d98a617f80c1201745b14095b0a7 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Wed, 9 Apr 2014 17:27:13 -0700 Subject: [PATCH] PR16719: Fix a couple leaked Dwfl instances * setupdwfl.cxx (setup_dwfl_kernel): When recursing into another round after downloading, call dwfl_end on the Dwfl that we already started. * tapset.cxx (tracepoint_builder::init_dw): Call dwfl_end on the Dwfl used to fill in the s.kernel_source_tree. * testsuite/systemtap.base/pr16719.exp: Add a tracepoint subtest. --- setupdwfl.cxx | 5 ++++- tapsets.cxx | 1 + testsuite/systemtap.base/pr16719.exp | 6 ++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/setupdwfl.cxx b/setupdwfl.cxx index 2be58d2b0..2bf992408 100644 --- a/setupdwfl.cxx +++ b/setupdwfl.cxx @@ -400,7 +400,10 @@ setup_dwfl_kernel (unsigned *modules_found, systemtap_session &s) { rc = download_kernel_debuginfo(s, hex); if(rc >= 0) - return setup_dwfl_kernel (modules_found, s); + { + dwfl_end (dwfl); + return setup_dwfl_kernel (modules_found, s); + } } } diff --git a/tapsets.cxx b/tapsets.cxx index 67cd1c3b9..65721580e 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -10770,6 +10770,7 @@ tracepoint_builder::init_dw(systemtap_session& s) } } } + dwfl_end (dwfl); } // prefixes diff --git a/testsuite/systemtap.base/pr16719.exp b/testsuite/systemtap.base/pr16719.exp index 489ca5ca8..20599ee7b 100644 --- a/testsuite/systemtap.base/pr16719.exp +++ b/testsuite/systemtap.base/pr16719.exp @@ -101,6 +101,12 @@ proc run_stap { probe pattern } { set subtest "kernel" run_stap {vfs.read} {*/vmlinux} +# Kernel tracepoint check +# Bad stap would have open /usr/lib/debug/lib/modules/`uname -r`/vmlinux +# (from getting s.kernel_source_tree in tracepoint_builder::init_dw().) +set subtest "tracepoint" +run_stap {kernel.trace("sched_switch")!,never} {*/vmlinux} + # User check # Bad stap would have open /usr/bin/ls or /usr/lib/debug/usr/bin/ls.debug set subtest "user" -- 2.43.5