From patchwork Thu Jun 7 23:27:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 27702 Received: (qmail 43240 invoked by alias); 7 Jun 2018 23:27:18 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 43180 invoked by uid 89); 7 Jun 2018 23:27:17 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=determines X-HELO: gateway36.websitewelcome.com Received: from gateway36.websitewelcome.com (HELO gateway36.websitewelcome.com) (192.185.188.18) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 07 Jun 2018 23:27:15 +0000 Received: from cm12.websitewelcome.com (cm12.websitewelcome.com [100.42.49.8]) by gateway36.websitewelcome.com (Postfix) with ESMTP id C9474400D0A13 for ; Thu, 7 Jun 2018 18:27:13 -0500 (CDT) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id R4JFf5SlLSjJAR4JFffGkc; Thu, 07 Jun 2018 18:27:13 -0500 X-Authority-Reason: nr=8 Received: from 75-166-19-45.hlrn.qwest.net ([75.166.19.45]:34818 helo=bapiya.Home) by box5379.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.91) (envelope-from ) id 1fR4JF-001iRw-IC; Thu, 07 Jun 2018 18:27:13 -0500 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [RFA] Remove cleanups from tracefile.c Date: Thu, 7 Jun 2018 17:27:06 -0600 Message-Id: <20180607232706.13875-1-tom@tromey.com> X-BWhitelist: no X-Source-L: No X-Exim-ID: 1fR4JF-001iRw-IC X-Source-Sender: 75-166-19-45.hlrn.qwest.net (bapiya.Home) [75.166.19.45]:34818 X-Source-Auth: tom+tromey.com X-Email-Count: 1 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes This removes cleanups from tracefile.c, by introducing a unique_ptr specialization. This code could be made even simpler via a deeper C++-ification, but I have not attempted that. Tested by the buildbot. gdb/ChangeLog 2018-06-07 Tom Tromey * tracefile.c (struct trace_file_writer_deleter): New. : Rename from trace_file_writer_xfree. (trace_file_writer_up): New typedef. (tsave_command, trace_save_tfile, trace_save_ctf): Update. --- gdb/ChangeLog | 7 +++++++ gdb/tracefile.c | 51 ++++++++++++++++++++------------------------------- 2 files changed, 27 insertions(+), 31 deletions(-) diff --git a/gdb/tracefile.c b/gdb/tracefile.c index ab34ecfdf99..18ce53bf12d 100644 --- a/gdb/tracefile.c +++ b/gdb/tracefile.c @@ -36,16 +36,21 @@ #define TRACE_WRITE_V_BLOCK(writer, num, val) \ writer->ops->frame_ops->write_v_block ((writer), (num), (val)) -/* Free trace file writer. */ +/* A unique pointer policy class for trace_file_writer. */ -static void -trace_file_writer_xfree (void *arg) +struct trace_file_writer_deleter { - struct trace_file_writer *writer = (struct trace_file_writer *) arg; + void operator() (struct trace_file_writer *writer) + { + writer->ops->dtor (writer); + xfree (writer); + } +}; - writer->ops->dtor (writer); - xfree (writer); -} +/* A unique_ptr specialization for trace_file_writer. */ + +typedef std::unique_ptr + trace_file_writer_up; /* Save tracepoint data to file named FILENAME through WRITER. WRITER determines the trace file format. If TARGET_DOES_SAVE is non-zero, @@ -311,9 +316,7 @@ tsave_command (const char *args, int from_tty) int target_does_save = 0; char **argv; char *filename = NULL; - struct cleanup *back_to; int generate_ctf = 0; - struct trace_file_writer *writer = NULL; if (args == NULL) error_no_arg (_("file in which to save trace data")); @@ -336,20 +339,17 @@ tsave_command (const char *args, int from_tty) if (!filename) error_no_arg (_("file in which to save trace data")); + trace_file_writer_up writer; if (generate_ctf) - writer = ctf_trace_file_writer_new (); + writer.reset (ctf_trace_file_writer_new ()); else - writer = tfile_trace_file_writer_new (); - - back_to = make_cleanup (trace_file_writer_xfree, writer); + writer.reset (tfile_trace_file_writer_new ()); - trace_save (filename, writer, target_does_save); + trace_save (filename, writer.get (), target_does_save); if (from_tty) printf_filtered (_("Trace data saved to %s '%s'.\n"), generate_ctf ? "directory" : "file", filename); - - do_cleanups (back_to); } /* Save the trace data to file FILENAME of tfile format. */ @@ -357,13 +357,8 @@ tsave_command (const char *args, int from_tty) void trace_save_tfile (const char *filename, int target_does_save) { - struct trace_file_writer *writer; - struct cleanup *back_to; - - writer = tfile_trace_file_writer_new (); - back_to = make_cleanup (trace_file_writer_xfree, writer); - trace_save (filename, writer, target_does_save); - do_cleanups (back_to); + trace_file_writer_up writer (tfile_trace_file_writer_new ()); + trace_save (filename, writer.get (), target_does_save); } /* Save the trace data to dir DIRNAME of ctf format. */ @@ -371,14 +366,8 @@ trace_save_tfile (const char *filename, int target_does_save) void trace_save_ctf (const char *dirname, int target_does_save) { - struct trace_file_writer *writer; - struct cleanup *back_to; - - writer = ctf_trace_file_writer_new (); - back_to = make_cleanup (trace_file_writer_xfree, writer); - - trace_save (dirname, writer, target_does_save); - do_cleanups (back_to); + trace_file_writer_up writer (ctf_trace_file_writer_new ()); + trace_save (dirname, writer.get (), target_does_save); } /* Fetch register data from tracefile, shared for both tfile and