aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Metzger <markus.t.metzger@intel.com>2013-12-03 10:20:47 +0100
committerMarkus Metzger <markus.t.metzger@intel.com>2014-01-27 08:56:16 +0100
commit568e808b7d80a7613c1b6d94ff93dd517436b249 (patch)
treedb6f698ce919f14e6f279328a9cf4edcbe7bbd2f
parent467d141bf5399b1092118981da1143523b19b896 (diff)
downloadgdb-568e808b7d80a7613c1b6d94ff93dd517436b249.zip
gdb-568e808b7d80a7613c1b6d94ff93dd517436b249.tar.gz
gdb-568e808b7d80a7613c1b6d94ff93dd517436b249.tar.bz2
btrace: initiate teardown when closing record btrace target
The to_teardown_btrace target method is used to free btrace resources during shutdown when target record has already been unpushed and we can't reliably talk to a remote target to disable branch tracing. Tracing resources are freed for each thread when the thread is removed; both on the GDB side and on the gdbserver side. In the remote case, the remote target that provides to_teardown_btrace to free the GDB side resources has already been unpushed when threads are destroyed. This results in a complaint "You can't do this ..." and in a few bytes of memory leaked for each thread. Initiate btrace teardown in record_btrace_close, so the remote target is still in place. 2014-01-27 Markus Metzger <markus.t.metzger@intel.com> * record-btrace.c (record_btrace_close): Call btrace_teardown for all threads.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/record-btrace.c7
2 files changed, 11 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index c949c02..0c0a8b2 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2014-01-27 Markus Metzger <markus.t.metzger@intel.com>
+
+ * record-btrace.c (record_btrace_close): Call btrace_teardown
+ for all threads.
+
2014-01-27 Joel Brobecker <brobecker@adacore.com>
* ada-lang.c: Remove "#ifdef UI_OUT" condition for including
diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c
index 3a93fdb..365b6be 100644
--- a/gdb/record-btrace.c
+++ b/gdb/record-btrace.c
@@ -213,11 +213,16 @@ record_btrace_stop_recording (void)
static void
record_btrace_close (void)
{
+ struct thread_info *tp;
+
/* Make sure automatic recording gets disabled even if we did not stop
recording before closing the record-btrace target. */
record_btrace_auto_disable ();
- /* We already stopped recording. */
+ /* We should have already stopped recording.
+ Tear down btrace in case we have not. */
+ ALL_THREADS (tp)
+ btrace_teardown (tp);
}
/* The to_info_record method of target record-btrace. */