Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 9 Jul 2020 10:50:06 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org
Subject:   svn commit: r363038 - stable/12/sys/kern
Message-ID:  <202007091050.069Ao6sd064728@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Thu Jul  9 10:50:06 2020
New Revision: 363038
URL: https://svnweb.freebsd.org/changeset/base/363038

Log:
  MFC r362885:
  Use tdfind() in pget().

Modified:
  stable/12/sys/kern/kern_proc.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/kern/kern_proc.c
==============================================================================
--- stable/12/sys/kern/kern_proc.c	Thu Jul  9 09:33:32 2020	(r363037)
+++ stable/12/sys/kern/kern_proc.c	Thu Jul  9 10:50:06 2020	(r363038)
@@ -370,29 +370,6 @@ pfind_any(pid_t pid)
 	return (p);
 }
 
-static struct proc *
-pfind_tid_locked(pid_t tid)
-{
-	struct proc *p;
-	struct thread *td;
-
-	sx_assert(&allproc_lock, SX_LOCKED);
-	FOREACH_PROC_IN_SYSTEM(p) {
-		PROC_LOCK(p);
-		if (p->p_state == PRS_NEW) {
-			PROC_UNLOCK(p);
-			continue;
-		}
-		FOREACH_THREAD_IN_PROC(p, td) {
-			if (td->td_tid == tid)
-				goto found;
-		}
-		PROC_UNLOCK(p);
-	}
-found:
-	return (p);
-}
-
 /*
  * Locate a process group by number.
  * The caller must hold proctree_lock.
@@ -420,23 +397,24 @@ int
 pget(pid_t pid, int flags, struct proc **pp)
 {
 	struct proc *p;
+	struct thread *td1;
 	int error;
 
 	p = curproc;
 	if (p->p_pid == pid) {
 		PROC_LOCK(p);
 	} else {
-		sx_slock(&allproc_lock);
 		if (pid <= PID_MAX) {
+			sx_slock(&allproc_lock);
 			p = pfind_locked(pid);
 			if (p == NULL && (flags & PGET_NOTWEXIT) == 0)
 				p = zpfind_locked(pid);
+			sx_sunlock(&allproc_lock);
 		} else if ((flags & PGET_NOTID) == 0) {
-			p = pfind_tid_locked(pid);
-		} else {
-			p = NULL;
+			td1 = tdfind(pid, -1);
+			if (td1 != NULL)
+				p = td1->td_proc;
 		}
-		sx_sunlock(&allproc_lock);
 		if (p == NULL)
 			return (ESRCH);
 		if ((flags & PGET_CANSEE) != 0) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202007091050.069Ao6sd064728>