btrace: initiate teardown when closing record btrace target
authorMarkus Metzger <markus.t.metzger@intel.com>
Tue, 3 Dec 2013 09:20:47 +0000 (10:20 +0100)
committerMarkus Metzger <markus.t.metzger@intel.com>
Mon, 27 Jan 2014 07:56:16 +0000 (08:56 +0100)
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.

gdb/ChangeLog
gdb/record-btrace.c

index c949c02158aeab7dcfc0c0221571774f9f024cef..0c0a8b2656995cea1ec2ab1e04247404fabeac97 100644 (file)
@@ -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
index 3a93fdbb9ab08f6a5645e3eecac6a0dc991ad6ac..365b6be1c8b4d8f962bd8e00764518e92e9fb95d 100644 (file)
@@ -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.  */