From nobody Mon Oct 19 05:23:26 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4j7P8Z3VSzz6vm1y for ; Mon, 19 Oct 2026 05:23:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4j7P8Z2pQvz3HJK for ; Mon, 19 Oct 2026 05:23:26 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792387406; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=jdFDDccroJa4U8z68BmmDYrdvc0pqU1750+xPaS6ksE=; b=LsbqiXVm8lHrcx/e9Db56pX7pIwvXsVdiSOw6MtHnwFPWtZbNY9EM8z3Fp+dLEtKu6Uajj x2U5g/47t7GyGQNsx1X5j1nkycMtEAfBGm1WGMl2oeU4gIchZt4Ad2sGBq4XUObvGFvpGs HYt6uE/bt/ZwI9i1PR0Ic1XCndwzQMZUGwfBEriWMV4nWI5ApKdHb6iBZ68Wp9T11VCQgL yCU2LbkUHwCubyLTteHlDrvwcpIWWGzlYYLknJxYAtZ17CIocbdLnGDPvzA6mI1TlDznGV PEGPpmOyE0vZoMvOUPie49KFMW8fHDUIbZ9uHw3yufBKYXh2on0zjEcMImdBIQ== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1792387406; b=RBSgRSXHcXmQajz9ZSXp1eHyabYWfS2rc4EkgUhwkwaJ/5iZawZsQhvNNm4UJ9V5lcjTAg LhjNBq4Xfyf3mRczC6pMSYC/m6A+5jhB4lyNdiKglpbCy0Lav2HwaMcHcoIS7o65qxlBsx IzgcHEMyrHALkDyBBRW5hLyRqHs0HawasRo4YPtryJkXPwsnE8XYRIFZsxO5BOgvQyNzBH Wxi8BoKOPlDsmu7/sLsa6pJ3CFFsPG6Aak9yKnP80G5ZgSjhnch4q/CbatJB6mnxYGl7n7 NPKUKhbNw5ERcfyRyxLgPWAYBUsCkeJYQgXbgplVtWIY063Wq3Ehi3uOxdp4+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792387406; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=jdFDDccroJa4U8z68BmmDYrdvc0pqU1750+xPaS6ksE=; b=gwQDIeSGiDlBZSxC+iJL9j78KIm+Rncw/6OTihihgc2IOSKg6sifaSCc98fp5+FMz/81gW s3K4zupxn2X90Mgftpz7rmTWeRKeLUKev1bMpL0J7Qm5fCecVwvyKiAFkWUlCud+GsNtwC LB2Bc9idRlhcdRdHdmSAPSjFbcd8Ul/nCyWA5Syx3GkKVvog1FLGwrSZ/cw+SinfC6OoS9 pojPmyXathpyPUE9bvorWpFPII920KNzKcYjH9y3eDLWcJcFLGTN2bnaSH0yyNwPEsO1k3 +sV0qYwwE5JgCaoGApW0rUAnWzD8TkCrtxwecJYtGFnyfyp1yBzj1ytO6NAGKw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4j7P8Z2P11z1M4t for ; Mon, 19 Oct 2026 05:23:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 25bc6 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 19 Oct 2026 05:23:26 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: ShengYi Hung Subject: git: 894f70a2bd8c - main - libthr: drop use of try_gc in the end of thr_join List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: Commit messages for the main branch of the src repository List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: aokblast X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 894f70a2bd8c7f67f131b76b9ce122a752818af3 Auto-Submitted: auto-generated Date: Mon, 19 Oct 2026 05:23:26 +0000 Message-Id: <6ad5a94e.25bc6.40f9dc85@gitrepo.freebsd.org> The branch main has been updated by aokblast: URL: https://cgit.FreeBSD.org/src/commit/?id=894f70a2bd8c7f67f131b76b9ce122a752818af3 commit 894f70a2bd8c7f67f131b76b9ce122a752818af3 Author: ShengYi Hung AuthorDate: 2026-10-13 22:40:05 +0000 Commit: ShengYi Hung CommitDate: 2026-10-19 05:23:14 +0000 libthr: drop use of try_gc in the end of thr_join thr_try_gc unlock and lock again to make sure the lock order. However, there is no reason for such roundtrip if the caller holds the correct oder. As a result, we create a new helper function to add the thread to gc list without unlock + lock and wire the join_common to this new helper. Reviewed by: kib MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D60717 --- lib/libthr/thread/thr_join.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/lib/libthr/thread/thr_join.c b/lib/libthr/thread/thr_join.c index 16137d482632..bc06390ebe58 100644 --- a/lib/libthr/thread/thr_join.c +++ b/lib/libthr/thread/thr_join.c @@ -92,19 +92,12 @@ _pthread_tryjoin_np(pthread_t pthread, void **thread_return) return (join_common(pthread, thread_return, NULL, false, true)); } -static void -join_common_joined(struct pthread *pthread, struct pthread *curthread, - void **thread_return) +static void * +join_common_detach(struct pthread *pthread) { - void *tmp; - - tmp = pthread->ret; pthread->flags |= THR_FLAGS_DETACHED; pthread->joiner = NULL; - _thr_try_gc(curthread, pthread); /* thread lock released */ - - if (thread_return != NULL) - *thread_return = tmp; + return (pthread->ret); } /* @@ -117,6 +110,7 @@ join_common(pthread_t pthread, void **thread_return, { struct pthread *curthread = _get_curthread(); struct timespec ts, ts2, *tsp; + void *tmp; long tid; int ret; @@ -156,7 +150,10 @@ join_common(pthread_t pthread, void **thread_return, THR_THREAD_UNLOCK(curthread, pthread); return (EBUSY); } - join_common_joined(pthread, curthread, thread_return); + tmp = join_common_detach(pthread); + _thr_try_gc(curthread, pthread); /* thread lock released */ + if (thread_return != NULL) + *thread_return = tmp; return (0); } @@ -193,8 +190,17 @@ join_common(pthread_t pthread, void **thread_return, backout_join(pthread, curthread); } else { ret = 0; + THREAD_LIST_WRLOCK(curthread); THR_THREAD_LOCK(curthread, pthread); - join_common_joined(pthread, curthread, thread_return); + tmp = join_common_detach(pthread); + if (THR_SHOULD_GC(pthread)) { + THR_LIST_REMOVE(pthread); + THR_GCLIST_ADD(pthread); + } + THR_THREAD_UNLOCK(curthread, pthread); + THREAD_LIST_UNLOCK(curthread); + if (thread_return != NULL) + *thread_return = tmp; } return (ret); }