From nobody Wed Oct 28 01:09:39 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 4jDq5h6wLHz6xg6Y for ; Wed, 28 Oct 2026 01:09:44 +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 4jDq5h6Kbnz4ptq for ; Wed, 28 Oct 2026 01:09:44 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793149784; 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=pEvep7FkCJsSDw/rMLpHpFJuT4TkMNIBSFqh0AiEcgg=; b=RPJm2g3dsJuomcR/kg2EmPxwCALJp5VH1oomit1wnOWZDU4SLu4Pa8RPxMeVsnfMuEOFQh U0ClwPqRnHqYwam3eNye/zqDIZC3c7d7UVcGNt6uyelv78dwmeL8IvqcxID2zTo8B06yR6 f/i84WLWalLL3r7mgvn4Ri59lTWOrpHLi0hbbR0zs7m9SKY4XildsxAwhaciKocSQHQLNx 0+benb6vjwVvBvnhEmfy2hQT613JwK3U7cbEv79yhMwbqoAPNOxG7ji+yoLItLDuK9ajfN 71Ji+hZKcjJkRft551+fT7dO2vLneW+CiX6esnr+5/8LLYnLkX6Ph2i9nny9qQ== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1793149784; b=s/fVMBBUbTzhgbc0NeXBUuuIwjqE1OW/y+jl+FgmUlpQY0KwUA79I56GnBtRObC1puIiBt Vu8CdVriRLKv9PhJErk1eOMX+d8GGWvuObuA+3vvKRXif567UFsHKxcQvztcKHJIMLQBtc 88buZUlpRulUdJDqiB4QeI5P1/yr3pJuehtt0VYOvU2xCd5HIrF/ZOGFvrIEcQ669mWyqI 3/nTG1GQeB/TV9W6Bk7v5PxTDyUlojUadWci2olO9oaEC2slTaaNG1j2QH1rBcobUJUDO5 5XwRlC1LWZs9578uKW/U6gdB9bGHSXV+rBP1mh+8CvpDJlzRZ2L/dUurcl9DDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793149784; 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=pEvep7FkCJsSDw/rMLpHpFJuT4TkMNIBSFqh0AiEcgg=; b=htlEK5SVGktczRENzC8hq/RdTdrYCQr01I5wc1Qpu5HuQ9z8sUJrD4z6iTz1jvqpQRgmw6 JZdbfwR3KPf1RjmPAXFM1dgJxvVjt3QYOpoZwHzN7639DRY6Dc5pBMzJTFX7m4qC3r8N6c I9iz6iIZzjzChHH50O8ZOA1tZKQUya0zy47+ebNHY2UONKuXNHJO/IhkgUXgfXxjoz0eVc vFTuyLfrxT3RDGEbO/C9u3ZS/Ju96urOSnAi4sShLhyfraU4Snm5A+NNlCkTF444+yMbOO C7nUaB4GwCSXL1chXGO0z/DcShYgaSMMcu/3AQOXt/lmSlwOhG6gqWI+TEyx7w== 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 4jDq5h5gz0zm0M for ; Wed, 28 Oct 2026 01:09:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3f151 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 28 Oct 2026 01:09:39 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 4ab9e73994e6 - main - libthr/thr_mutex.c: make mutex asserts more useful 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: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4ab9e73994e673e518d1b0631f8ce7d1faec6d80 Auto-Submitted: auto-generated Date: Wed, 28 Oct 2026 01:09:39 +0000 Message-Id: <6ae14b53.3f151.6fcf68c4@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=4ab9e73994e673e518d1b0631f8ce7d1faec6d80 commit 4ab9e73994e673e518d1b0631f8ce7d1faec6d80 Author: Konstantin Belousov AuthorDate: 2026-10-27 13:05:59 +0000 Commit: Konstantin Belousov CommitDate: 2026-10-28 00:56:06 +0000 libthr/thr_mutex.c: make mutex asserts more useful Print the file and line number of the caller where the assert fired. Use _thread_exitf() directly for this. Sponsored by: The FreeBSD Foundation MFC after: 1 week --- lib/libthr/thread/thr_mutex.c | 50 +++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/lib/libthr/thread/thr_mutex.c b/lib/libthr/thread/thr_mutex.c index 9c0939aa6080..58c79c973a9b 100644 --- a/lib/libthr/thread/thr_mutex.c +++ b/lib/libthr/thread/thr_mutex.c @@ -131,41 +131,50 @@ mutex_init_link(struct pthread_mutex *m __unused) #endif } +#if defined(_PTHREADS_INVARIANTS) static void -mutex_assert_is_owned(struct pthread_mutex *m __unused) +mutex_assert_is_owned(struct pthread_mutex *m, int line) { - -#if defined(_PTHREADS_INVARIANTS) - if (__predict_false(m->m_qe.tqe_prev == NULL)) - PANIC("mutex %p own %#x is not on list %p %p", + if (__predict_false(m->m_qe.tqe_prev == NULL)) { + _thread_exitf(__FILE__, line, + "mutex %p own %#x is not on list %p %p", m, m->m_lock.m_owner, m->m_qe.tqe_prev, m->m_qe.tqe_next); -#endif + } } static void -mutex_assert_not_owned(struct pthread *curthread __unused, - struct pthread_mutex *m __unused) +mutex_assert_not_owned(struct pthread_mutex *m, int line) { + struct pthread *curthread; -#if defined(_PTHREADS_INVARIANTS) + curthread = _get_curthread(); if (__predict_false(m->m_qe.tqe_prev != NULL || - m->m_qe.tqe_next != NULL)) - PANIC("mutex %p own %#x is on list %p %p", + m->m_qe.tqe_next != NULL)) { + _thread_exitf(__FILE__, line, + "mutex %p own %#x is on list %p %p", m, m->m_lock.m_owner, m->m_qe.tqe_prev, m->m_qe.tqe_next); + } if (__predict_false(is_robust_mutex(m) && (m->m_lock.m_rb_lnk != 0 || m->m_rb_prev != NULL || (is_pshared_mutex(m) && curthread->robust_list == (uintptr_t)&m->m_lock) || (!is_pshared_mutex(m) && curthread->priv_robust_list == - (uintptr_t)&m->m_lock)))) - PANIC( - "mutex %p own %#x is on robust linkage %p %p head %p phead %p", + (uintptr_t)&m->m_lock)))) { + _thread_exitf(__FILE__, line, + "mutex %p own %#x is on robust linkage %p %p head %p phead %p", m, m->m_lock.m_owner, (void *)m->m_lock.m_rb_lnk, m->m_rb_prev, (void *)curthread->robust_list, (void *)curthread->priv_robust_list); -#endif + } } +#define MUTEX_ASSERT_IS_OWNED(m) mutex_assert_is_owned(m, __LINE__) +#define MUTEX_ASSERT_NOT_OWNED(m) mutex_assert_not_owned(m, __LINE__) +#else +#define MUTEX_ASSERT_IS_OWNED(m) do {} while (0) +#define MUTEX_ASSERT_NOT_OWNED(m) do {} while (0) +#endif + static bool is_pshared_mutex(struct pthread_mutex *m) { @@ -477,8 +486,7 @@ _thr_mutex_destroy(pthread_mutex_t *mutex) if (m1 != NULL) { if ((uint32_t)m1->m_lock.m_owner != UMUTEX_RB_OWNERDEAD) { - mutex_assert_not_owned( - _get_curthread(), m1); + MUTEX_ASSERT_NOT_OWNED(m1); } __thr_pshared_destroy(mutex); } @@ -490,7 +498,7 @@ _thr_mutex_destroy(pthread_mutex_t *mutex) ret = EBUSY; } else { *mutex = THR_MUTEX_DESTROYED; - mutex_assert_not_owned(_get_curthread(), m); + MUTEX_ASSERT_NOT_OWNED(m); __thr_free(m); ret = 0; } @@ -530,7 +538,7 @@ enqueue_mutex(struct pthread *curthread, struct pthread_mutex *m, /* Add to the list of owned mutexes: */ if (error != EOWNERDEAD) - mutex_assert_not_owned(curthread, m); + MUTEX_ASSERT_NOT_OWNED(m); qidx = mutex_qidx(m); TAILQ_INSERT_TAIL(&curthread->mq[qidx], m, m_qe); if (!is_pshared_mutex(m)) @@ -558,7 +566,7 @@ dequeue_mutex(struct pthread *curthread, struct pthread_mutex *m) struct pthread_mutex *mp, *mn; int qidx; - mutex_assert_is_owned(m); + MUTEX_ASSERT_IS_OWNED(m); qidx = mutex_qidx(m); if (is_robust_mutex(m)) { mp = m->m_rb_prev; @@ -1054,7 +1062,7 @@ _pthread_mutex_setprioceiling(pthread_mutex_t * __restrict mutex, curthread = _get_curthread(); if (PMUTEX_OWNER_ID(m) == TID(curthread)) { - mutex_assert_is_owned(m); + MUTEX_ASSERT_IS_OWNED(m); m1 = TAILQ_PREV(m, mutex_queue, m_qe); m2 = TAILQ_NEXT(m, m_qe); if ((m1 != NULL && m1->m_lock.m_ceilings[0] > (u_int)ceiling) ||