From patchwork Wed Jan 25 13:56:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Burgess X-Patchwork-Id: 63674 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 03F6838582BE for ; Wed, 25 Jan 2023 13:57:14 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 03F6838582BE DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1674655034; bh=fVn5IOLw5BZIPWuRa0Az7BeeqKdJycOl4yREX59G6Ig=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=i4YlGCGE9gLFV01YoRJFjtYHsOmTaPeYbgyMN7fuInH7ZWDHOpOS2qppoxJarlG/J rjQdVB8GkDxBls3y9ZG7hUVHoNqeZDSsOosoHADCRlEajdUQLh2LvwKxLXNn00zrNS c3hYjU+y1ifbkwFh1En5B0IhyYTdlgpNCFKLhqoY= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 321213858407 for ; Wed, 25 Jan 2023 13:56:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 321213858407 Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-392-8DZp_uDuPCOaRROibh9ieQ-1; Wed, 25 Jan 2023 08:56:22 -0500 X-MC-Unique: 8DZp_uDuPCOaRROibh9ieQ-1 Received: by mail-qk1-f200.google.com with SMTP id v7-20020a05620a0f0700b006faffce43b2so12829257qkl.9 for ; Wed, 25 Jan 2023 05:56:22 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fVn5IOLw5BZIPWuRa0Az7BeeqKdJycOl4yREX59G6Ig=; b=hdLHP9nRZ6acr4ZhCH/dwMaqZuZ8r+lqOb6TNuD5sKAouT4jAUTmpp423C6g7jOBjD 1RB6ELNLDmjGW3Y4Ikf7uSfD5R00rGopve7iVGTO8PwEbDB3ixaOK6MfFSAKALO8b3wg O10ffdb93sOk/mBW/uuok2K//zqh3P9wzlDw882pl+BFiedGdk6QxnNqotiau2ndqwpE +rMGNyFaCfokKz4EWVTpy6bMXyoo+ZNZioegiAUkypit7mXWzeVvAbb96Tqy8v3ZePVQ KGWgUcL/dqffRL4N8bCY7f/dAhuw9+viPW77y0uJTdZtjkCafh9X+3ifmupO6sydbaz7 4PSw== X-Gm-Message-State: AFqh2kpOXF0Ein77kqbcpVhmycK3Slq59xaJvOAP59kNWk+bS99fZpmZ +J2y5ejAGMR9w8grugM2ZRRJf3heUdWN8WVFVxShIZ5koo7vWEEkv2ol8dQ8RFM/DHvbYoAvh0i RGoWtzVn87Du++5IoU61r/odTKKto68SvQZjzBzujPgnoOOAeHnSrz1dpujW2wDQzabIXDrwX4Q == X-Received: by 2002:ac8:4cc7:0:b0:3ab:2a7f:83e4 with SMTP id l7-20020ac84cc7000000b003ab2a7f83e4mr41907815qtv.35.1674654981842; Wed, 25 Jan 2023 05:56:21 -0800 (PST) X-Google-Smtp-Source: AMrXdXvsSokmsF+dOXtA1SbQyTYzhB4iN3NlBIRXpdhuBGugAMtfoKYGkuWY+lO5pXfmPanhHtr1kw== X-Received: by 2002:ac8:4cc7:0:b0:3ab:2a7f:83e4 with SMTP id l7-20020ac84cc7000000b003ab2a7f83e4mr41907793qtv.35.1674654981523; Wed, 25 Jan 2023 05:56:21 -0800 (PST) Received: from localhost (95.72.115.87.dyn.plus.net. [87.115.72.95]) by smtp.gmail.com with ESMTPSA id f14-20020a37ad0e000000b0070495934152sm3534712qkm.48.2023.01.25.05.56.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Jan 2023 05:56:21 -0800 (PST) To: gdb-patches@sourceware.org Cc: Andrew Burgess Subject: [PATCHv2 3/3] gdb/tui: don't leak the known_window_types map Date: Wed, 25 Jan 2023 13:56:11 +0000 Message-Id: <39fcef41919b141f6f1cd48d6a4b6f4d3b22ded3.1674654912.git.aburgess@redhat.com> X-Mailer: git-send-email 2.25.4 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Andrew Burgess via Gdb-patches From: Andrew Burgess Reply-To: Andrew Burgess Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" This commit finishes the task that was started in the previous commit. Now that all Python TUI window factories are correctly deleted when the Python interpreter is shut down, we no longer need to dynamically allocate the known_window_types map in tui-layout.c This commit changes known_window_types to a statically allocated data structure, removes the dynamic allocation from initialize_known_windows, and then replaces lots of '->' with '.' throughout this file. There should be no user visible changes after this commit. --- gdb/tui/tui-layout.c | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c index b895e00a80d..b65314ec30b 100644 --- a/gdb/tui/tui-layout.c +++ b/gdb/tui/tui-layout.c @@ -344,14 +344,9 @@ make_standard_window (const char *) return tui_win_list[V]; } -/* A map holding all the known window types, keyed by name. Note that - this is heap-allocated and "leaked" at gdb exit. This avoids - ordering issues with destroying elements in the map at shutdown. - In particular, destroying this map can occur after Python has been - shut down, causing crashes if any window destruction requires - running Python code. */ +/* A map holding all the known window types, keyed by name. */ -static std::unordered_map *known_window_types; +static std::unordered_map known_window_types; /* Helper function that returns a TUI window, given its name. */ @@ -362,8 +357,8 @@ tui_get_window_by_name (const std::string &name) if (name == window->name ()) return window; - auto iter = known_window_types->find (name); - if (iter == known_window_types->end ()) + auto iter = known_window_types.find (name); + if (iter == known_window_types.end ()) error (_("Unknown window type \"%s\""), name.c_str ()); tui_win_info *result = iter->second (name.c_str ()); @@ -377,20 +372,18 @@ tui_get_window_by_name (const std::string &name) static void initialize_known_windows () { - known_window_types = new std::unordered_map; - - known_window_types->emplace (SRC_NAME, + known_window_types.emplace (SRC_NAME, make_standard_window); - known_window_types->emplace (CMD_NAME, + known_window_types.emplace (CMD_NAME, make_standard_window); - known_window_types->emplace (DATA_NAME, + known_window_types.emplace (DATA_NAME, make_standard_window); - known_window_types->emplace (DISASSEM_NAME, + known_window_types.emplace (DISASSEM_NAME, make_standard_window); - known_window_types->emplace (STATUS_NAME, + known_window_types.emplace (STATUS_NAME, make_standard_window); } @@ -422,11 +415,11 @@ tui_register_window (const char *name, window_factory &&factory) this far then NAME must be a user defined window. Remove any existing factory and replace it with this new version. */ - auto iter = known_window_types->find (name); - if (iter != known_window_types->end ()) - known_window_types->erase (iter); + auto iter = known_window_types.find (name); + if (iter != known_window_types.end ()) + known_window_types.erase (iter); - known_window_types->emplace (std::move (name_copy), + known_window_types.emplace (std::move (name_copy), std::move (factory)); } @@ -1207,8 +1200,8 @@ initialize_layouts () static bool validate_window_name (const std::string &name) { - auto iter = known_window_types->find (name); - return iter != known_window_types->end (); + auto iter = known_window_types.find (name); + return iter != known_window_types.end (); } /* Implementation of the "tui new-layout" command. */