
commit 3868b5d210f8bccbfb88464f62089447cb3330ed Author: Nick Mathewson <nickm@torproject.org> Date: Wed Sep 25 11:41:40 2013 -0400 Rename mutex_for_cond -> mutex_nonreentrant We'll want to use these for other stuff too. --- src/common/compat_pthreads.c | 6 +++--- src/common/compat_threads.c | 9 +++++++++ src/common/compat_threads.h | 6 +++++- src/common/compat_winthreads.c | 2 +- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/common/compat_pthreads.c b/src/common/compat_pthreads.c index a2e4065..8d3c609 100644 --- a/src/common/compat_pthreads.c +++ b/src/common/compat_pthreads.c @@ -97,10 +97,10 @@ tor_mutex_init(tor_mutex_t *mutex) } } -/** As tor_mutex_init, but initialize a mutex suitable for use with a - * condition variable. */ +/** As tor_mutex_init, but initialize a mutex suitable that may be + * non-reentrant, if the OS supports that. */ void -tor_mutex_init_for_cond(tor_mutex_t *mutex) +tor_mutex_init_nonreentrant(tor_mutex_t *mutex) { int err; if (PREDICT_UNLIKELY(!threads_initialized)) diff --git a/src/common/compat_threads.c b/src/common/compat_threads.c index 024c627..f2a516a 100644 --- a/src/common/compat_threads.c +++ b/src/common/compat_threads.c @@ -30,6 +30,15 @@ tor_mutex_new(void) tor_mutex_init(m); return m; } +/** Return a newly allocated, ready-for-use mutex. This one might be + * non-reentrant, if that's faster. */ +tor_mutex_t * +tor_mutex_new_nonreentrant(void) +{ + tor_mutex_t *m = tor_malloc_zero(sizeof(tor_mutex_t)); + tor_mutex_init_nonreentrant(m); + return m; +} /** Release all storage and system resources held by <b>m</b>. */ void tor_mutex_free(tor_mutex_t *m) diff --git a/src/common/compat_threads.h b/src/common/compat_threads.h index 9070f13..245df76 100644 --- a/src/common/compat_threads.h +++ b/src/common/compat_threads.h @@ -46,8 +46,9 @@ typedef struct tor_mutex_t { tor_mutex_t *tor_mutex_new(void); +tor_mutex_t *tor_mutex_new_nonreentrant(void); void tor_mutex_init(tor_mutex_t *m); -void tor_mutex_init_for_cond(tor_mutex_t *m); +void tor_mutex_init_nonreentrant(tor_mutex_t *m); void tor_mutex_acquire(tor_mutex_t *m); void tor_mutex_release(tor_mutex_t *m); void tor_mutex_free(tor_mutex_t *m); @@ -55,6 +56,9 @@ void tor_mutex_uninit(tor_mutex_t *m); unsigned long tor_get_thread_id(void); void tor_threads_init(void); +/** Conditions need nonreentrant mutexes with pthreads. */ +#define tor_mutex_init_for_cond(m) tor_mutex_init_nonreentrant(m) + void set_main_thread(void); int in_main_thread(void); diff --git a/src/common/compat_winthreads.c b/src/common/compat_winthreads.c index 2b1527a..0ab26b7 100644 --- a/src/common/compat_winthreads.c +++ b/src/common/compat_winthreads.c @@ -49,7 +49,7 @@ tor_mutex_init(tor_mutex_t *m) InitializeCriticalSection(&m->mutex); } void -tor_mutex_init_for_cond(tor_mutex_t *m) +tor_mutex_init_nonreentrant(tor_mutex_t *m) { InitializeCriticalSection(&m->mutex); }