thr_mutex.c (300043) | thr_mutex.c (301136) |
---|---|
1/* 2 * Copyright (c) 1995 John Birrell <jb@cimlogic.com.au>. 3 * Copyright (c) 2006 David Xu <davidxu@freebsd.org>. 4 * Copyright (c) 2015, 2016 The FreeBSD Foundation 5 * 6 * All rights reserved. 7 * 8 * Portions of this software were developed by Konstantin Belousov --- 23 unchanged lines hidden (view full) --- 32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36 * SUCH DAMAGE. 37 */ 38 39#include <sys/cdefs.h> | 1/* 2 * Copyright (c) 1995 John Birrell <jb@cimlogic.com.au>. 3 * Copyright (c) 2006 David Xu <davidxu@freebsd.org>. 4 * Copyright (c) 2015, 2016 The FreeBSD Foundation 5 * 6 * All rights reserved. 7 * 8 * Portions of this software were developed by Konstantin Belousov --- 23 unchanged lines hidden (view full) --- 32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36 * SUCH DAMAGE. 37 */ 38 39#include <sys/cdefs.h> |
40__FBSDID("$FreeBSD: head/lib/libthr/thread/thr_mutex.c 300043 2016-05-17 09:56:22Z kib $"); | 40__FBSDID("$FreeBSD: head/lib/libthr/thread/thr_mutex.c 301136 2016-06-01 16:12:26Z cem $"); |
41 42#include "namespace.h" 43#include <stdlib.h> 44#include <errno.h> 45#include <string.h> 46#include <sys/param.h> 47#include <sys/queue.h> 48#include <pthread.h> --- 81 unchanged lines hidden (view full) --- 130#endif 131} 132 133static void 134mutex_assert_is_owned(struct pthread_mutex *m __unused) 135{ 136 137#if defined(_PTHREADS_INVARIANTS) | 41 42#include "namespace.h" 43#include <stdlib.h> 44#include <errno.h> 45#include <string.h> 46#include <sys/param.h> 47#include <sys/queue.h> 48#include <pthread.h> --- 81 unchanged lines hidden (view full) --- 130#endif 131} 132 133static void 134mutex_assert_is_owned(struct pthread_mutex *m __unused) 135{ 136 137#if defined(_PTHREADS_INVARIANTS) |
138 if (__predict_false(m->m_qe.tqe_prev == NULL)) { 139 char msg[128]; 140 snprintf(msg, sizeof(msg), 141 "mutex %p own %#x is not on list %p %p", | 138 if (__predict_false(m->m_qe.tqe_prev == NULL)) 139 PANIC("mutex %p own %#x is not on list %p %p", |
142 m, m->m_lock.m_owner, m->m_qe.tqe_prev, m->m_qe.tqe_next); | 140 m, m->m_lock.m_owner, m->m_qe.tqe_prev, m->m_qe.tqe_next); |
143 PANIC(msg); 144 } | |
145#endif 146} 147 148static void 149mutex_assert_not_owned(struct pthread *curthread __unused, 150 struct pthread_mutex *m __unused) 151{ 152 153#if defined(_PTHREADS_INVARIANTS) 154 if (__predict_false(m->m_qe.tqe_prev != NULL || | 141#endif 142} 143 144static void 145mutex_assert_not_owned(struct pthread *curthread __unused, 146 struct pthread_mutex *m __unused) 147{ 148 149#if defined(_PTHREADS_INVARIANTS) 150 if (__predict_false(m->m_qe.tqe_prev != NULL || |
155 m->m_qe.tqe_next != NULL)) { 156 char msg[128]; 157 snprintf(msg, sizeof(msg), 158 "mutex %p own %#x is on list %p %p", | 151 m->m_qe.tqe_next != NULL)) 152 PANIC("mutex %p own %#x is on list %p %p", |
159 m, m->m_lock.m_owner, m->m_qe.tqe_prev, m->m_qe.tqe_next); | 153 m, m->m_lock.m_owner, m->m_qe.tqe_prev, m->m_qe.tqe_next); |
160 PANIC(msg); 161 } | |
162 if (__predict_false(is_robust_mutex(m) && 163 (m->m_lock.m_rb_lnk != 0 || m->m_rb_prev != NULL || 164 (is_pshared_mutex(m) && curthread->robust_list == 165 (uintptr_t)&m->m_lock) || 166 (!is_pshared_mutex(m) && curthread->priv_robust_list == | 154 if (__predict_false(is_robust_mutex(m) && 155 (m->m_lock.m_rb_lnk != 0 || m->m_rb_prev != NULL || 156 (is_pshared_mutex(m) && curthread->robust_list == 157 (uintptr_t)&m->m_lock) || 158 (!is_pshared_mutex(m) && curthread->priv_robust_list == |
167 (uintptr_t)&m->m_lock)))) { 168 char msg[128]; 169 snprintf(msg, sizeof(msg), | 159 (uintptr_t)&m->m_lock)))) 160 PANIC( |
170 "mutex %p own %#x is on robust linkage %p %p head %p phead %p", 171 m, m->m_lock.m_owner, (void *)m->m_lock.m_rb_lnk, 172 m->m_rb_prev, (void *)curthread->robust_list, 173 (void *)curthread->priv_robust_list); | 161 "mutex %p own %#x is on robust linkage %p %p head %p phead %p", 162 m, m->m_lock.m_owner, (void *)m->m_lock.m_rb_lnk, 163 m->m_rb_prev, (void *)curthread->robust_list, 164 (void *)curthread->priv_robust_list); |
174 PANIC(msg); 175 } | |
176#endif 177} 178 179static bool 180is_pshared_mutex(struct pthread_mutex *m) 181{ 182 183 return ((m->m_lock.m_flags & USYNC_PROCESS_SHARED) != 0); --- 1017 unchanged lines hidden --- | 165#endif 166} 167 168static bool 169is_pshared_mutex(struct pthread_mutex *m) 170{ 171 172 return ((m->m_lock.m_flags & USYNC_PROCESS_SHARED) != 0); --- 1017 unchanged lines hidden --- |