From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25284 invoked by alias); 23 Dec 2016 20:01:36 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 24820 invoked by uid 89); 23 Dec 2016 20:01:35 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=no version=3.3.2 spammy=Prevent, tromeycom, UD:tromey.com, Hx-languages-length:4820 X-HELO: gproxy6-pub.mail.unifiedlayer.com Received: from gproxy6-pub.mail.unifiedlayer.com (HELO gproxy6-pub.mail.unifiedlayer.com) (67.222.39.168) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with SMTP; Fri, 23 Dec 2016 20:01:25 +0000 Received: (qmail 9124 invoked by uid 0); 23 Dec 2016 20:01:24 -0000 Received: from unknown (HELO cmgw3) (10.0.90.84) by gproxy6.mail.unifiedlayer.com with SMTP; 23 Dec 2016 20:01:23 -0000 Received: from box522.bluehost.com ([74.220.219.122]) by cmgw3 with id PY101u0102f2jeq01Y13qR; Fri, 23 Dec 2016 13:01:03 -0700 X-Authority-Analysis: v=2.1 cv=G8WPTbU5 c=1 sm=1 tr=0 a=GsOEXm/OWkKvwdLVJsfwcA==:117 a=GsOEXm/OWkKvwdLVJsfwcA==:17 a=L9H7d07YOLsA:10 a=9cW_t1CCXrUA:10 a=s5jvgZ67dGcA:10 a=n5n_aSjo0skA:10 a=zstS-IiYAAAA:8 a=lu4yfV_Y0tXyPnJX6ooA:9 a=4G6NA9xxw8l3yy4pmD5M:22 Received: from 75-171-175-27.hlrn.qwest.net ([75.171.175.27]:45422 helo=bapiya) by box522.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.86_1) (envelope-from ) id 1cKW1U-0008TI-8T; Fri, 23 Dec 2016 13:01:00 -0700 From: Tom Tromey To: Tom Tromey Cc: Pedro Alves , gdb-patches@sourceware.org Subject: Re: [RFA 7/8] Use unique_xmalloc_ptr in execute_gdb_command References: <1480395946-10924-1-git-send-email-tom@tromey.com> <1480395946-10924-8-git-send-email-tom@tromey.com> <878ts2yi5m.fsf@tromey.com> <87inqletsw.fsf@tromey.com> <7f11b7bb-bebb-1cd3-1e92-266638272443@redhat.com> <87d1gmwk2j.fsf@tromey.com> Date: Fri, 23 Dec 2016 20:01:00 -0000 In-Reply-To: <87d1gmwk2j.fsf@tromey.com> (Tom Tromey's message of "Tue, 20 Dec 2016 11:07:32 -0700") Message-ID: <87h95u5sat.fsf@tromey.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1.90 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-BWhitelist: no X-Exim-ID: 1cKW1U-0008TI-8T X-Source-Sender: 75-171-175-27.hlrn.qwest.net (bapiya) [75.171.175.27]:45422 X-Source-Auth: tom+tromey.com X-Email-Count: 2 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTIyLmJsdWVob3N0LmNvbQ== X-SW-Source: 2016-12/txt/msg00408.txt.bz2 Pedro> In some other local patch that I hadn't posted, I handled a similar Pedro> situation of save/restoring some global that we don't want to expose Pedro> by making the "make_cleanup_..." function return a scoped_restore, which Pedro> avoids having to create a new class. It seems a bit simpler that Pedro> creating a class to me, and maybe a tiny bit more efficient code-space Pedro> wise (rtti?) Did you consider this approach? Tom> I didn't, but I like it, so I'll make this change. Here's the new version of this patch. Tom commit 20649c18216bf744aade97fed85c8a61b2e2905c Author: Tom Tromey Date: Mon Nov 28 21:11:53 2016 -0700 Remove cleanups from execute_gdb_command This replaces a cleanup in execute_gdb_command with an instance of std::string. Testing showed that this originally missed a cleanup that was returned by prevent_dont_repeat. This version of the patch changes prevent_dont_repeat to return a scoped_restore rather than a cleanup. 2016-12-14 Tom Tromey * top.c (prevent_dont_repeat): Change return type. * python/python.c (execute_gdb_command): Use std::string. Update. * guile/guile.c (gdbscm_execute_gdb_command): Update. * command.h (prevent_dont_repeat): Change return type. * breakpoint.c (bpstat_do_actions_1): Update. diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d402851..c482013 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2016-12-14 Tom Tromey + + * top.c (prevent_dont_repeat): Change return type. + * python/python.c (execute_gdb_command): Use std::string. + Update. + * guile/guile.c (gdbscm_execute_gdb_command): Update. + * command.h (prevent_dont_repeat): Change return type. + * breakpoint.c (bpstat_do_actions_1): Update. + 2016-12-13 Tom Tromey * value.h (scoped_value_mark::~scoped_value_mark): Call diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 6fd18fd..e47e73b 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -4685,7 +4685,7 @@ bpstat_do_actions_1 (bpstat *bsp) executing_breakpoint_commands = 1; old_chain = make_cleanup (cleanup_executing_breakpoints, 0); - prevent_dont_repeat (); + scoped_restore preventer = prevent_dont_repeat (); /* This pointer will iterate over the list of bpstat's. */ bs = *bsp; diff --git a/gdb/command.h b/gdb/command.h index 965d91f..924d8d3 100644 --- a/gdb/command.h +++ b/gdb/command.h @@ -408,7 +408,7 @@ extern void error_no_arg (const char *) ATTRIBUTE_NORETURN; extern void dont_repeat (void); -extern struct cleanup *prevent_dont_repeat (void); +extern scoped_restore_tmpl prevent_dont_repeat (void); /* Used to mark commands that don't do anything. If we just leave the function field NULL, the command is interpreted as a help topic, or diff --git a/gdb/guile/guile.c b/gdb/guile/guile.c index 9a126a1..a95b894 100644 --- a/gdb/guile/guile.c +++ b/gdb/guile/guile.c @@ -332,7 +332,7 @@ gdbscm_execute_gdb_command (SCM command_scm, SCM rest) inner_cleanups = make_cleanup_restore_integer (¤t_ui->async); current_ui->async = 0; - prevent_dont_repeat (); + scoped_restore preventer = prevent_dont_repeat (); if (to_string) to_string_res = execute_command_to_string (command, from_tty); else diff --git a/gdb/python/python.c b/gdb/python/python.c index 83b9805..e92f72c 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -601,8 +601,7 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw) TRY { /* Copy the argument text in case the command modifies it. */ - char *copy = xstrdup (arg); - struct cleanup *cleanup = make_cleanup (xfree, copy); + std::string copy (arg); struct interp *interp; scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0); @@ -614,12 +613,11 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw) interp = interp_lookup (current_ui, "console"); current_uiout = interp_ui_out (interp); - prevent_dont_repeat (); + scoped_restore preventer = prevent_dont_repeat (); if (to_string) - to_string_res = execute_command_to_string (copy, from_tty); + to_string_res = execute_command_to_string (©[0], from_tty); else - execute_command (copy, from_tty); - do_cleanups (cleanup); + execute_command (©[0], from_tty); } CATCH (except, RETURN_MASK_ALL) { diff --git a/gdb/top.c b/gdb/top.c index 077fb2a..9960e6b 100644 --- a/gdb/top.c +++ b/gdb/top.c @@ -757,13 +757,10 @@ dont_repeat (void) /* Prevent dont_repeat from working, and return a cleanup that restores the previous state. */ -struct cleanup * +scoped_restore_tmpl prevent_dont_repeat (void) { - struct cleanup *result = make_cleanup_restore_integer (&suppress_dont_repeat); - - suppress_dont_repeat = 1; - return result; + return make_scoped_restore (&suppress_dont_repeat, 1); }