From nobody Mon Oct 19 05:23:26 2026 X-Original-To: dev-commits-src-all@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 4j7P8g4BmLz6vm20 for ; Mon, 19 Oct 2026 05:23:31 +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 4j7P8g2SDSz3HDG for ; Mon, 19 Oct 2026 05:23:31 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792387411; 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=vWVmG8lDHjA+/QkW0x5fRDOBqFUe3dk09EB11bFh4gEWzdLgS9zkXHCX7dmvpzngFiJsRU Gt+leoTat66KZj3JpgZdNM290t731e5g0XUHAW5AlSZNxBXnjMDKEGAJFJ5Vskg3iZI/h7 zBSzVwHHB8hweoyiTsDCgsIIb6uF9ioRgI7ha7mtnizHaYnvgMo74X1tErU5RocGBE6pXP 1JhHJ1lPoJMPPVpeSznBolHT2h7voOMrtUkarSGpGzMYc7kzoZuiwjFOoBJQByWA8AlU8O 0/Im/wWGHzPoA/N9BpoU2uesn6MoaI+4kLXAAs1VWFbVmw5gMVyDi4EpL2zQTA== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1792387411; b=IxIBAtMmfw2lZALORlCI7JDrA0zIjJMPY8CS/qHb0+R2OBeRYTK6fSWQq1nnzmTcdRiFNi WBWZtR9tk/8oUCYvcYqrYrb6YtdtcWQ0s3M6oTqqJ8OUKi3iEt744FGoWQSNMV0+YXBcJ9 xernRD08qnSALbKLKwkbwUjwgP37fgoYIrbhPedPmldQoV71xHHeEteCmOCKeWrx8f1Zv4 ls4xkPgTlJKCzPCl2vl5+LzlAjSm4h1PfltNkJES7Lr8dLAC47R5zAHKeEyMZPTHcIOwkj EHcq+Y38Z2K5Cqn6kqzc7Ux5hXhou9cT/29YDsqetO4Kjvk37d3VdC3Q619jwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792387411; 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=EF1S9C8SljFFTZUtcw7tQA/83AA6V8F+orjn3TFq7F61y4senZySxlJmTiIu52zmaG20Zk oRklkS7C/fVVYG5oX6l0a47Q0tkCyH+mNiAOIbhwgDjU4SJZVIUKMCVbKUJ3ZlCmgzYXLe I2I74cT0SUJyclwh+mQc4ftiabocrBG3P3sDE4+AZTZzDMB3bLuERaP49W9swQM+b9kI6O FbN+/B+W5KuF+sl78ZtkxHA3uEdFQLANPxUUraExYgkz3ULanCYp7DSlejpRVc4r9KaFkp +agm5pdjtckkMcC1WdiKFwQi9ZbaTMRHc4MKIbKKowbZQ3tm6+Xvm8XyQD6Cyg== 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 4j7P8g1gjPz1MKJ for ; Mon, 19 Oct 2026 05:23:31 +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-all X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: Commit messages for all branches 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); }