Replace make_cleanup_restore_current_traceframe with RAII class
authorSimon Marchi <simon.marchi@polymtl.ca>
Sat, 7 Apr 2018 18:03:12 +0000 (14:03 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Sat, 7 Apr 2018 18:03:12 +0000 (14:03 -0400)
I put the constructor in tracepoint.c because it needs to read
traceframe_number, and I prefer to do that than to expose
traceframe_number.

gdb/ChangeLog:

* tracepoint.c (struct current_traceframe_cleanup): Remove.
(do_restore_current_traceframe_cleanup): Remove.
(restore_current_traceframe_cleanup_dtor): Remove.
(make_cleanup_restore_current_traceframe): Remove.
(scoped_restore_current_traceframe::scoped_restore_current_traceframe):
New.
* tracepoint.h (struct scoped_restore_current_traceframe): New.
* infrun.c (fetch_inferior_event): Use
scoped_restore_current_traceframe.

gdb/ChangeLog
gdb/infrun.c
gdb/tracepoint.c
gdb/tracepoint.h

index 9c7cc149fa338eeaef88da67d64247d5866c07b8..fc95d7632fd7bd264375f43f48b0ef6aa46161e3 100644 (file)
@@ -1,3 +1,15 @@
+2018-04-07  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       * tracepoint.c (struct current_traceframe_cleanup): Remove.
+       (do_restore_current_traceframe_cleanup): Remove.
+       (restore_current_traceframe_cleanup_dtor): Remove.
+       (make_cleanup_restore_current_traceframe): Remove.
+       (scoped_restore_current_traceframe::scoped_restore_current_traceframe):
+       New.
+       * tracepoint.h (struct scoped_restore_current_traceframe): New.
+       * infrun.c (fetch_inferior_event): Use
+       scoped_restore_current_traceframe.
+
 2018-04-07  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * dwarf2read.h (struct dwarf2_per_objfile) <n_type_units>:
index 6648698df6f14a73ad9067ccbd30fc5ac1d78816..d89f8137f4a069eca70a5548366eae1f95eecd36 100644 (file)
@@ -3877,9 +3877,10 @@ fetch_inferior_event (void *client_data)
      debugging.  If we're looking at traceframes while the target is
      running, we're going to need to get back to that mode after
      handling the event.  */
+  gdb::optional<scoped_restore_current_traceframe> maybe_restore_traceframe;
   if (non_stop)
     {
-      make_cleanup_restore_current_traceframe ();
+      maybe_restore_traceframe.emplace ();
       set_current_traceframe (-1);
     }
 
index f66cc686b8e0785242138083c2ac63afb1d610f6..a2f1376c5c00adfbff7eaf8350c270f2660aa361 100644 (file)
@@ -3012,43 +3012,9 @@ set_current_traceframe (int num)
   clear_traceframe_info ();
 }
 
-/* A cleanup used when switching away and back from tfind mode.  */
-
-struct current_traceframe_cleanup
-{
-  /* The traceframe we were inspecting.  */
-  int traceframe_number;
-};
-
-static void
-do_restore_current_traceframe_cleanup (void *arg)
-{
-  struct current_traceframe_cleanup *old
-    = (struct current_traceframe_cleanup *) arg;
-
-  set_current_traceframe (old->traceframe_number);
-}
-
-static void
-restore_current_traceframe_cleanup_dtor (void *arg)
-{
-  struct current_traceframe_cleanup *old
-    = (struct current_traceframe_cleanup *) arg;
-
-  xfree (old);
-}
-
-struct cleanup *
-make_cleanup_restore_current_traceframe (void)
-{
-  struct current_traceframe_cleanup *old =
-    XNEW (struct current_traceframe_cleanup);
-
-  old->traceframe_number = traceframe_number;
-
-  return make_cleanup_dtor (do_restore_current_traceframe_cleanup, old,
-                           restore_current_traceframe_cleanup_dtor);
-}
+scoped_restore_current_traceframe::scoped_restore_current_traceframe ()
+: m_traceframe_number (traceframe_number)
+{}
 
 /* Given a number and address, return an uploaded tracepoint with that
    number, creating if necessary.  */
index 8613cb2dd69e314a5df791d690cd606e5a4cc0da..02f4bf70890da81a5a8f05a70f8fc1edc3cb7323 100644 (file)
@@ -321,7 +321,22 @@ extern int get_tracepoint_number (void);
    etc.).  */
 extern void set_current_traceframe (int num);
 
-struct cleanup *make_cleanup_restore_current_traceframe (void);
+struct scoped_restore_current_traceframe
+{
+  scoped_restore_current_traceframe ();
+
+  ~scoped_restore_current_traceframe ()
+  {
+    set_current_traceframe (m_traceframe_number);
+  }
+
+  DISABLE_COPY_AND_ASSIGN (scoped_restore_current_traceframe);
+
+private:
+
+  /* The traceframe we were inspecting.  */
+  int m_traceframe_number;
+};
 
 void free_actions (struct breakpoint *);