From patchwork Thu Nov 23 18:39:34 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 24482 Received: (qmail 96135 invoked by alias); 23 Nov 2017 18:39:49 -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 96126 invoked by uid 89); 23 Nov 2017 18:39:49 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KB_WAM_FROM_NAME_SINGLEWORD, SPF_PASS autolearn=ham version=3.3.2 spammy=spotted X-HELO: sessmg23.ericsson.net Received: from sessmg23.ericsson.net (HELO sessmg23.ericsson.net) (193.180.251.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 23 Nov 2017 18:39:47 +0000 Received: from ESESSHC006.ericsson.se (Unknown_Domain [153.88.183.36]) by sessmg23.ericsson.net (Symantec Mail Security) with SMTP id 2C.58.07741.1F5171A5; Thu, 23 Nov 2017 19:39:45 +0100 (CET) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.36) with Microsoft SMTP Server (TLS) id 14.3.352.0; Thu, 23 Nov 2017 19:39:44 +0100 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=simon.marchi@ericsson.com; Received: from [142.133.61.121] (192.75.88.130) by DBXPR07MB320.eurprd07.prod.outlook.com (2a01:111:e400:941d::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.260.2; Thu, 23 Nov 2017 18:39:42 +0000 Subject: Re: [PATCH] C++ify osdata To: Pedro Alves , Simon Marchi , References: <20171118233827.7418-1-simon.marchi@polymtl.ca> <9d0b9473-1fd5-8310-0cde-8233efed58bc@redhat.com> From: Simon Marchi Message-ID: <19f399ce-dfb9-15fd-41ed-2a4576a438f6@ericsson.com> Date: Thu, 23 Nov 2017 13:39:34 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <9d0b9473-1fd5-8310-0cde-8233efed58bc@redhat.com> X-ClientProxiedBy: BN6PR14CA0039.namprd14.prod.outlook.com (2603:10b6:404:13f::25) To DBXPR07MB320.eurprd07.prod.outlook.com (2a01:111:e400:941d::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ebefa9cb-dc50-4566-cd07-08d532a19059 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600025)(4604075)(2017052603199); SRVR:DBXPR07MB320; X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB320; 3:/nA4p1b+kEBoTdeIpE6WDUTIDFxe5qZr2IX5gnOS8ZFOw6P2IILRY7u4AjjO7M2rQ7RsyKavA7o8bODKtw/yjR6xsv/I8bh7NW76FpFaCA+h0CkFqrP8TmeaSBnMRibmfvz+4GHjGNucMjQhLdD4MoLxf26MlymbflTlkrDkHVy2LfskKOqzfuOhZThcgaqwfEqbgJlJWRx5xmPGYTpLEaDuhkLYVodi3ilWNKOLgAKCQzaKElL3EMCqhdzEz485; 25:hb3m0iGaaSELKfL0iPndlrOaujo8X7aQJvCZpAl10SKhd0i09K0w4AxmOkM6E22b/TVPTqji/LGNG/+mUrgXRpb1NipUtmXd4kseqfDci3LcSoRaVTkmUBjoi1Axt9XWyF9z+uEr0P60hCqE72EoaWbMPyDa+CUUBiUSSWpqDkODp2K5dGVhppRep3ev1TErWz/rPSoTwZN6xvPPdH0qFkZysJGFPzBwMVASEOr00O6tom8nf5qxZpB6UTESLKXj50GYfapbyyJhTZ6pfmAB2rPTDs8irgI2D+4OYSnX9XCDi/zJvNTyTlOWQZd+DYzdU5BtonzYLxIi5ocPLGwLjYxuZ4smsGI4BJOyN15yVe0=; 31:O/vWUNjqFFKYUtVkv2Jqjk8SSP1W1MOTUcNiElgTxR2pxr00GYhEpaTMHoVZmTRSSDCJaUJnMY4R4YZPWlPiOpUrVQ2o5B1AR7n7uTJDZrj7zmyelfdbVMSuzwa3Fq2kK+8weqqb209BoiSCBsCMCHngVL7Ys4a16GqKjFlVML6deIvtEigQMpn7BLagfvZ5UcN9JZDe6iTKTwVGQWG1zy+mm1/AUygo5xIH7OoIMvs= X-MS-TrafficTypeDiagnostic: DBXPR07MB320: X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB320; 20:bTWVR8ZMgqXW5pzINhQLEs7IuJh+ASNbmBPgwg/FDpesFsk5QzUGDomIrqJoFnkrMyjnBQ3iWX+faof0GHypu2OtSIIfh8IIR1zi0jvmgvRPWw4sjK2uzld9+xvV+v7kP9pFVrGgYDtx9c4Bkwyzy/XiXBQtcB+CAw3FWhxCtM+/LQP5Ldfw0vigev8OHEpTxn9bpudsDyZdUrYOiNPadS9KQcWu6wEcyK30en24jWYabkcbxGaJjsriuLJt79Q8xTLsgrptZX1rs9ye87/7jhdFLL873+bbMYdvBkQ+Nz46DHxnjBa6vTWp4VUanSuls6uyNpFN5Uj+GbR8NgHXUDKPhMzARqkSW1k+iX/2OHa8fhFbS091G6LQHbebMWYZ7u5HAbW45S/77nzWGjGrYyaa9SgwU8QF7JN42A3rZgAj/ki5vknyubNUHwuBHTYdnXpBeAmbwSQL0LGFJ2R/MyZYfzENntd/YznPRhjFrq+9Ucaiebgp4rx3Yk8WZkWK; 4:oL0Hkxm14EJoJqawTD7CiUbmc4BISX2vOtY7vjzaPSdFmDWwRWVtTkcjx7H58ANANHNTlpDelS8i4/2/V6Hfo8Exf7oYzikRRmBWWyBbkR5XKr2Nvz8xoM9CmrLvuQ9czCInHMYSmg9Ox4qquH5FfhoVFcG55g6i2SOiKaTbLU7nQ6bKxSSvON6xfcE0RfaAWPxavXS9EOszsdizIxuQ74lGyO0tVq015WmZluDq6Bp3+Dw4ktq7Y52RBiuPVVbJNTcRQjcujVx7+AIsp5i7e9miWiV7pb574UGqBdCL6AG2YJyD7cVK2C6X2+TG+sfc X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(37575265505322); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(3002001)(3231022)(93006095)(93001095)(10201501046)(6041248)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123555025)(20161123558100)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DBXPR07MB320; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DBXPR07MB320; X-Forefront-PRVS: 05009853EF X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6049001)(6009001)(39860400002)(346002)(376002)(366004)(199003)(54534003)(377424004)(24454002)(189002)(65806001)(4001150100001)(316002)(16526018)(23746002)(8936002)(8676002)(5660300001)(16576012)(81166006)(33646002)(97736004)(110136005)(81156014)(65826007)(53546010)(86362001)(2906002)(76176999)(49976008)(53936002)(478600001)(229853002)(58126008)(31686004)(54356999)(189998001)(106356001)(50986999)(101416001)(2950100002)(36756003)(6486002)(64126003)(6666003)(25786009)(3846002)(7736002)(47776003)(305945005)(31696002)(6246003)(230700001)(68736007)(105586002)(50466002)(66066001)(65956001)(83506002)(6116002)(52116002)(78286006); DIR:OUT; SFP:1101; SCL:1; SRVR:DBXPR07MB320; H:[142.133.61.121]; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1; DBXPR07MB320; 23:LUQK+Lemwn/5A5QZlYZ/eJnPGTke0C6IXo8EhO?= =?Windows-1252?Q?jIgd71lt09NXqugHoaGaH2t2GWc3BuNgHSmXFRfao/5GwBsiyVcwQHvd?= =?Windows-1252?Q?cGd/QK3W6p/5jHgm6R394MvF0HipjC+dyHG9i9Fsb69fEZ91KY04nG+c?= =?Windows-1252?Q?ZY9PjA8QIrVJg8VPNiwhg+n0kXt4hES0SXdSMeue7Mj7FlYICYQ4zGEw?= =?Windows-1252?Q?SIAH9tGnm+Dgk5l8FDMq5/vpEVJq8s0AQp/SZ+SPwC5INJ10HvqR0+6e?= =?Windows-1252?Q?Ad3c68aGPiv8CW0UtLjeS7eRTFCefnIjhCUXsXOl/wCjMDdqA5xFLRCX?= =?Windows-1252?Q?5eUaYcamOi4eqtbrTnvzkYYHpQjF7d5moCySeO5aVkRXiUmKMUNizJ5Y?= =?Windows-1252?Q?JwLeTcpWx7gc0i68BcguMRoVQqfxi/NWVrlWM4mMdRfc910GkKbBhRSq?= =?Windows-1252?Q?PcuioAnsPd+2acQu1/nDc4s6b5ttQfcbSmt/4JaxLAZQR9cKs5Lv7bjk?= =?Windows-1252?Q?6ZKYBg0mSnW0E6D4axs0tfezBItDTxsxJxcOjNwhdC8RLPDoia5/4jE5?= =?Windows-1252?Q?t2xqOd+rdeWCbMkAF4cPEZlS3CtLByPEtONrfS+gz+AFKgnHDJFEtyRm?= =?Windows-1252?Q?8xDez7i5qENLqiMbzEq13m3jzo9HKl7a+SVxJrqQWKeNN40+HcJ7/POB?= =?Windows-1252?Q?M+hPZLpodMBkl6OuhvV6l16ePtrDftM8DTkkusKIVN1xPDSvQAIfRtxr?= =?Windows-1252?Q?ASsm4aZNvjdSOru54f3+uqBKZHdCq5kpMHa/mhHIrcRnumssjGjwlG6r?= =?Windows-1252?Q?0v2+JA+2B9rFB6auGjmjlVK5sUtaUsDtPZjS4WxLPCRXu/2TevWwWcYD?= =?Windows-1252?Q?0MCQDJ3gw6Am0CQCrRau0Sz0aLFLfQoo1N1E7des1sl3z7zaW7VemEyV?= =?Windows-1252?Q?lxUaMnX4vDFlUpqXpDGpEWDOKkrZ51xw1C1+K22Yv5v77J8xD+dI3p1p?= =?Windows-1252?Q?JkF0Ai9z870Sp+ZeXlONdDQ4D1aB4Ys+nrs0gIyxFbT0yq4Dw4WE4d32?= =?Windows-1252?Q?LlTPW+qKeUeWLOQlLOP91Z2f2viRvHUrwAdmWXFVglF43QcBtNG9Dn4h?= =?Windows-1252?Q?8VWeDasstYJd0yyD0ijh3i3MYj+g4xqquVRwaotOpANCJ6BR8HbDMP2U?= =?Windows-1252?Q?dnCmMyLnFw7PVUdXHlJYuDLoR/gfLW9FUUykHqa4H+7sBbHeWMVu1tOx?= =?Windows-1252?Q?R81Pri7zKVVVNBz6/r96PuO1IkHO8Ns10uhtR0LuWmeP3LT83rn6QuPx?= =?Windows-1252?Q?1hclV/271qTuWjNun8QOQcFkLhEhwq3/4/ZtR1bJremL9S1WWy5y+PEs?= =?Windows-1252?Q?3ucg8HhM9I1J8olaFCGkXYa9FC5AYxdgsdcnczAsZ3zDZvms3yIO7aFi?= =?Windows-1252?Q?2V4w82FJQyehgsEkeGpgpBRwHqfaOacWapY9TuQKbdt1jYFXrSN7A3br?= =?Windows-1252?Q?YuTTIaZv/cymwcroTC7MzlCGzSa/rzVi65cmn/VuGkMQ7KKTa4neqw7F?= =?Windows-1252?Q?ngdwEgOF2mYhV1SIh5CQqPSFHroniE7AAS?= X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB320; 6:TDa0By7BZDJOBC4mEmu2aAClAOGINYU+5yZUB4zj5PNVI4N1VbuVAzmqWF7rysdcO+2ZrbrhYR/Khvy5lSpcewYwghPPx2MqDcepUHuOqfwL9IVFok5YYhKGYMxti8KHecbOb6OXZzpbjGhAyNvlpJaBNgWAWTrnFu3yCCSr9fCxAUt3ga8fx/m1O4TtmW/Czt3shJbGjSdD8c/X7DNHymoPFRuWzm2O5CdUpzWs4RofL8qfZX0rILyV7zzfjWAo5+xYfvgNsPvITMdq/3qydontO7xkGlOopc3Qc+eucKpPiwkGt07/UFdHIMYCdrZCiLKGWllhYF+CRlS4O4MMQRtLlgqEM7/eTD2I4AVPcDE=; 5:5U2TdpgwthUEwy7MFvvxqjJJ0qHBZiumy138+mvTpdLaCI+bXReEwq65WVgiPadLQ/Vo6RNB//CEgXIziH8wcUQb8yNxDHtNsoYxquJzvmmGz9+9mdsqWXxdnzVgcGmSeDbSy465QALPapXJ590JLPt+Fh2EszqQMtqWDX4KLnI=; 24:virOPSSEB0hPSvfkiQCrXSrlOZpnxhZsfHQklbKlrRXvlkyKf3NbbRk+BJe3tgfXzIPea/uUWmGfGlbW1r+xhWUJqC9SKOxlLt6dC1b7kT8=; 7:N4mpnDXWXlW/DqKvHIyzb0tjzxVSSb49Tc/jgw7ZmYzrKv5PCotTO8Mk41FSg8FyTWKAMuitJsH9bFKXYjOGdLv3vtK1BhHjkrGj8VKbOvUO/xkv99z7MRwLyReWrcYkGdCVz+2tQbl03i3Sa6nYf36FHPJtKjRaxmGNdao4PSC/AnMPH0kIc+29MNitVPFA7GCjg9Di4WXpKLqOoyWW9htevQNPuFMeYmF7j7ZozmITucol4iHmfCK+I04PAIUh SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2017 18:39:42.9939 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ebefa9cb-dc50-4566-cd07-08d532a19059 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBXPR07MB320 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes On 2017-11-23 07:54 AM, Pedro Alves wrote: > Hi Simon, > > I think I spotted an issue here. > > On 11/18/2017 11:38 PM, Simon Marchi wrote: >> + /* This keeps a map from integer (pid) to vector of struct osdata_item. >> + The vector contains information about all threads for the given pid. */ >> + std::map *> tree_; > > Isn't this leaking the heap-allocated vectors? > > Why make it a map of pointers, actually? Why not: > > std::map> > > It's more efficient, and I think results in simpler code. You > won't need the tree_.find() for example, can just do: > > tree_[pid_i].push_back (...); > > Thanks, > Pedro Alves > Oops, thanks for noticing and for the suggestion. I don't know what I was thinking. What about this patch? From 2a14038a76715c1bc84d8a533e17322521620202 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Thu, 23 Nov 2017 13:21:35 -0500 Subject: [PATCH] Fix memory leak in list_available_thread_groups Commit C++ify osdata 479f8de1b3b7e69ca8d557bbe9d843c7d1bc89c5 introduced a memory leak. We allocate std::vectors and insert them in a map, but never free them. Instead, the map value type can be std::vector objects directly. gdb/ChangeLog: * mi/mi-main.c (list_available_thread_groups): Change map value type to std::vector. --- gdb/mi/mi-main.c | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index c7db478..3ca3500 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -716,7 +716,7 @@ list_available_thread_groups (const std::set &ids, int recurse) /* This keeps a map from integer (pid) to vector of struct osdata_item. The vector contains information about all threads for the given pid. */ - std::map *> tree_; + std::map> tree; /* get_osdata will throw if it cannot return data. */ std::unique_ptr data = get_osdata ("processes"); @@ -729,18 +729,8 @@ list_available_thread_groups (const std::set &ids, int recurse) { const std::string *pid = get_osdata_column (item, "pid"); int pid_i = strtoul (pid->c_str (), NULL, 0); - std::vector *vec; - auto n = tree_.find (pid_i); - if (n == tree_.end ()) - { - vec = new std::vector; - tree_[pid_i] = vec; - } - else - vec = n->second; - - vec->push_back (item); + tree[pid_i].push_back (item); } } @@ -774,14 +764,14 @@ list_available_thread_groups (const std::set &ids, int recurse) if (recurse) { - auto n = tree_.find (pid_i); - if (n != tree_.end ()) + auto n = tree.find (pid_i); + if (n != tree.end ()) { - std::vector *children = n->second; + std::vector &children = n->second; ui_out_emit_list thread_list_emitter (uiout, "threads"); - for (const osdata_item &child : *children) + for (const osdata_item &child : children) { ui_out_emit_tuple tuple_emitter (uiout, NULL); const std::string *tid = get_osdata_column (child, "tid");