From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16695 invoked by alias); 17 Jan 2020 15:49:31 -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 16683 invoked by uid 89); 17 Jan 2020 15:49:30 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-18.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: simark.ca Received: from simark.ca (HELO simark.ca) (158.69.221.121) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 17 Jan 2020 15:49:29 +0000 Received: from [172.16.0.133] (192-222-181-218.qc.cable.ebox.net [192.222.181.218]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 82C8D1E5F8; Fri, 17 Jan 2020 10:49:27 -0500 (EST) Subject: Re: [PATCH v2 18/24] Multi-target support From: Simon Marchi To: Pedro Alves , gdb-patches@sourceware.org References: <20191017225026.30496-1-palves@redhat.com> <20191017225026.30496-19-palves@redhat.com> Message-ID: <0efdd157-43cc-62ba-1d8e-ae444db59b43@simark.ca> Date: Fri, 17 Jan 2020 16:19:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2020-01/txt/msg00537.txt.bz2 On 2020-01-16 10:47 p.m., Simon Marchi wrote: > On 2019-10-17 6:50 p.m., Pedro Alves wrote: >> This commit adds multi-target support to GDB. What this means is that >> with this commit, GDB can now be connected to different targets at the >> same time. E.g., you can debug a live native process and a core dump >> at the same time, connect to multiple gdbservers, etc. > > Hi Pedro, > > I think I found something odd happening starting with this commit. When > the test gdb.threads/tid-reuse.exp runs, we are adding a thread_info to the > inferior's thread list when a thread_info object with the same ptid is > already present. I don't think this is ever supposed to happen, right? > > This can be observed by applying the following diff and running > gdb.threads/tid-reuse.exp. Note that some distributions are starting to bump > pid_max to a really large value, so make sure it's not that on your system. > > diff --git a/gdb/thread.c b/gdb/thread.c > index 4959f938c7f3..8909e371e2ce 100644 > --- a/gdb/thread.c > +++ b/gdb/thread.c > @@ -254,7 +254,10 @@ new_thread (struct inferior *inf, ptid_t ptid) > struct thread_info *last; > > for (last = inf->thread_list; last->next != NULL; last = last->next) > - ; > + gdb_assert (ptid != last->ptid); > + > + gdb_assert (ptid != last->ptid); > + > last->next = tp; > } > > > What I have found so far, by breaking at thread.c:274 and stepping into > the "delete_thread" call, is that `inferior_ptid == ptid` is false > (inferior_ptid is (0,0,0)). In delete_thread, we are actually not > deleting the thread because ->deletable () returns false, because > the refcount is 2. > > Before this patch, we would enter the `if (inferior_ptid == ptid)`. > > If it can help, here is the command line I'm using to debug this, which is > mimicking the test: > > ./gdb -nx --data-directory=data-directory testsuite/outputs/gdb.threads/tid-reuse/tid-reuse -iex "set confirm off" -iex "set pagination off" -ex start -ex "set print thread-events off" -ex "b after_count" -ex c -ex "b do_nothing_thread_func" -ex c -ex d -ex "b after_reuse_time" -ex c > > Simon > I filed this in bugzilla, so we can track it better: https://sourceware.org/bugzilla/show_bug.cgi?id=25412 Simon