+2019-08-06  Tom Tromey  <tromey@adacore.com>
+
+       * breakpoint.c (init_breakpoint_sal): Update.
+       (breakpoint): Update.
+       * breakpoint.h (struct breakpoint) <filter>: Now a
+       unique_xmalloc_ptr.
+
 2019-08-05  Christian Biesinger  <cbiesinger@google.com>
 
        * NEWS: Mention dictionary access on blocks.
 
     b->location = std::move (location);
   else
     b->location = new_address_location (b->loc->address, NULL, 0);
-  b->filter = filter.release ();
+  b->filter = std::move (filter);
 }
 
 static void
 {
   xfree (this->cond_string);
   xfree (this->extra_string);
-  xfree (this->filter);
 }
 
 static struct bp_location *
 
   decode_line_full (location, DECODE_LINE_FUNFIRSTLINE, search_pspace,
                    NULL, 0, &canonical, multiple_symbols_all,
-                   b->filter);
+                   b->filter.get ());
 
   /* We should get 0 or 1 resulting SALs.  */
   gdb_assert (canonical.lsals.size () < 2);
 
   event_location_up location;
 
   /* The filter that should be passed to decode_line_full when
-     re-setting this breakpoint.  This may be NULL, but otherwise is
-     allocated with xmalloc.  */
-  char *filter = NULL;
+     re-setting this breakpoint.  This may be NULL.  */
+  gdb::unique_xmalloc_ptr<char> filter;
 
   /* For a ranged breakpoint, the location we used to find the end of
      the range.  */