From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 108985 invoked by alias); 6 May 2017 01:46:37 -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 107694 invoked by uid 89); 6 May 2017 01:46:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_HELO_PASS,SPF_SOFTFAIL autolearn=ham version=3.3.2 spammy=circumstances, circumstance, Hx-languages-length:2140 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; Sat, 06 May 2017 01:46:34 +0000 Received: by simark.ca (Postfix, from userid 33) id CAD9D1E4A2; Fri, 5 May 2017 21:46:34 -0400 (EDT) To: Kevin Buettner Subject: Re: [PATCH v2 5/7] Add thread_db_notice_clone to gdbserver X-PHP-Originating-Script: 33:rcube.php MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Sat, 06 May 2017 01:46:00 -0000 From: Simon Marchi Cc: gdb-patches@sourceware.org In-Reply-To: <20170408230727.0f65ad8f@pinnacle.lan> References: <20170408224959.67164a27@pinnacle.lan> <20170408230727.0f65ad8f@pinnacle.lan> Message-ID: <06e2d2b6c1aa9f0f9a151caf7db22356@polymtl.ca> X-Sender: simon.marchi@polymtl.ca User-Agent: Roundcube Webmail/1.2.5 X-IsSubscribed: yes X-SW-Source: 2017-05/txt/msg00160.txt.bz2 On 2017-04-09 02:07, Kevin Buettner wrote: > While working on a patch for fetching a thread handle in gdbserver, I > ran into a circumstance in which tests in gdb.mi/mi-nsmoribund.exp > would occasionally fail. Over a large enough number of runs, it would > fail roughly 2% of the time. > > That thread handle patch caused find_one_thread() to be called on > every stop. find_one_thread() calls td_ta_map_lwp2thr() which, in > turn, can cause ps_get_thread_area() to be called. > ps_get_thread_area() makes a call to ptrace() for getting the thread > area address. If this should happen when the thread is not stopped, > the call to ptrace will return error which in turn propogates back to > find_one_thread(). find_one_thread() calls error() in this instance > which causes the program to die. > > This patch causes find_one_thread() to be called upon reciept of a > clone event. Since the clone is stopped, the circumstances described > above cannot occur. This patch looks good to me, although I'm not very knowledgeable in the thread handling area. Just one comment below. > diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c > index e27cbf8..6f06eb8 100644 > --- a/gdb/gdbserver/linux-low.c > +++ b/gdb/gdbserver/linux-low.c > @@ -653,6 +653,8 @@ handle_extended_wait (struct lwp_info > **orig_event_lwp, int wstat) > new_lwp->status_pending = status; > } > > + thread_db_notice_clone (get_thread_process (event_thr), ptid); > + > /* Don't report the event. */ > return 1; > } > diff --git a/gdb/gdbserver/linux-low.h b/gdb/gdbserver/linux-low.h > index 7dcbfcf..87ce53a 100644 > --- a/gdb/gdbserver/linux-low.h > +++ b/gdb/gdbserver/linux-low.h > @@ -409,5 +409,6 @@ int thread_db_handle_monitor_command (char *); > int thread_db_get_tls_address (struct thread_info *thread, CORE_ADDR > offset, > CORE_ADDR load_module, CORE_ADDR *address); > int thread_db_look_up_one_symbol (const char *name, CORE_ADDR *addrp); > +void thread_db_notice_clone (struct process_info *proc, ptid_t lwp); Could you add a comment to document this function? Thanks, Simon