From patchwork Fri Dec 23 21:28:42 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Baldwin X-Patchwork-Id: 18676 Received: (qmail 96316 invoked by alias); 23 Dec 2016 21:30:26 -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 84720 invoked by uid 89); 23 Dec 2016 21:30:15 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.1 required=5.0 tests=AWL, BAYES_00, SPF_HELO_PASS, SPF_SOFTFAIL autolearn=no version=3.3.2 spammy=baldwin, Baldwin, D*FreeBSD.org, U*jhb X-HELO: mail.baldwin.cx Received: from bigwig.baldwin.cx (HELO mail.baldwin.cx) (96.47.65.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 23 Dec 2016 21:30:03 +0000 Received: from ralph.com (c-73-231-226-104.hsd1.ca.comcast.net [73.231.226.104]) by mail.baldwin.cx (Postfix) with ESMTPSA id ECC3910AA64 for ; Fri, 23 Dec 2016 16:30:01 -0500 (EST) From: John Baldwin To: gdb-patches@sourceware.org Subject: [PATCH] PR threads/20743: Don't attempt to suspend or resume exited threads. Date: Fri, 23 Dec 2016 13:28:42 -0800 Message-Id: <20161223212842.42715-1-jhb@FreeBSD.org> X-IsSubscribed: yes When resuming a native FreeBSD process, ignore exited threads when suspending/resuming individual threads prior to continuing the process. gdb/ChangeLog: PR threads/20743 * fbsd-nat.c (resume_one_thread_cb): Ignore exited threads. (resume_all_threads_cb): Likewise. (fbsd_resume): Assert resuming thread has not exited. --- gdb/ChangeLog | 7 +++++++ gdb/fbsd-nat.c | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index db6e913..4fb3732 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2016-12-23 John Baldwin + + PR threads/20743 + * fbsd-nat.c (resume_one_thread_cb): Ignore exited threads. + (resume_all_threads_cb): Likewise. + (fbsd_resume): Assert resuming thread has not exited. + 2016-12-22 Doug Evans * infrun.c (set_step_over_info): Add comment. diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c index ade62f1..7cd08c6 100644 --- a/gdb/fbsd-nat.c +++ b/gdb/fbsd-nat.c @@ -662,6 +662,9 @@ resume_one_thread_cb (struct thread_info *tp, void *data) if (ptid_get_pid (tp->ptid) != ptid_get_pid (*ptid)) return 0; + if (is_exited (tp->ptid)) + return 0; + if (ptid_get_lwp (tp->ptid) == ptid_get_lwp (*ptid)) request = PT_RESUME; else @@ -680,6 +683,9 @@ resume_all_threads_cb (struct thread_info *tp, void *data) if (!ptid_match (tp->ptid, *filter)) return 0; + if (is_exited (tp->ptid)) + return 0; + if (ptrace (PT_RESUME, ptid_get_lwp (tp->ptid), NULL, 0) == -1) perror_with_name (("ptrace")); return 0; @@ -711,6 +717,7 @@ fbsd_resume (struct target_ops *ops, if (ptid_lwp_p (ptid)) { /* If ptid is a specific LWP, suspend all other LWPs in the process. */ + gdb_assert (!is_exited (ptid)); iterate_over_threads (resume_one_thread_cb, &ptid); } else