diff options
author | Nick Mathewson <nickm@torproject.org> | 2007-03-17 21:09:49 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2007-03-17 21:09:49 +0000 |
commit | f8f5ea10de84dc777ec0a6edb084fb0dda7e7057 (patch) | |
tree | dad404c6e937e05401d445e310d3c7fc5467f1d6 | |
parent | 194e0ae1042059c0b3090b5ea9678013935c7fb7 (diff) | |
download | tor-f8f5ea10de84dc777ec0a6edb084fb0dda7e7057.tar.gz tor-f8f5ea10de84dc777ec0a6edb084fb0dda7e7057.zip |
r12191@catbus: nickm | 2007-03-15 15:33:37 -0400
Check return values from pthread_mutex functions.
svn:r9862
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | src/common/compat.c | 28 |
2 files changed, 26 insertions, 5 deletions
@@ -38,8 +38,9 @@ Changes in version 0.2.0.1-alpha - 2007-??-?? try to use \ consistently on windows and / consistently on unix: it makes the log messages nicer. - o Minor bugfixes: + o Minor bugfixes (other): - Stop allowing hibernating servers to be "stable" or "fast". + - Check return values from pthread_mutex functions. o Minor bugfixes (controller), reported by daejees: - Make 'getinfo fingerprint' return a 551 error if we're not a diff --git a/src/common/compat.c b/src/common/compat.c index a60d45a92d..f15bb1fd38 100644 --- a/src/common/compat.c +++ b/src/common/compat.c @@ -1248,30 +1248,50 @@ struct tor_mutex_t { tor_mutex_t * tor_mutex_new(void) { + int err; tor_mutex_t *mutex = tor_malloc_zero(sizeof(tor_mutex_t)); - pthread_mutex_init(&mutex->mutex, NULL); + err = pthread_mutex_init(&mutex->mutex, NULL); + if (PREDICT_UNLIKELY(err)) { + log_err(LD_GENERAL, "Error %d creating a mutex.", err); + tor_fragile_assert(); + } return mutex; } /** Wait until <b>m</b> is free, then acquire it. */ void tor_mutex_acquire(tor_mutex_t *m) { + int err; tor_assert(m); - pthread_mutex_lock(&m->mutex); + err = pthread_mutex_lock(&m->mutex); + if (PREDICT_UNLIKELY(err)) { + log_err(LD_GENERAL, "Error %d locking a mutex.", err); + tor_fragile_assert(); + } } /** Release the lock <b>m</b> so another thread can have it. */ void tor_mutex_release(tor_mutex_t *m) { + int err; tor_assert(m); - pthread_mutex_unlock(&m->mutex); + err = pthread_mutex_unlock(&m->mutex); + if (PREDICT_UNLIKELY(err)) { + log_err(LD_GENERAL, "Error %d unlocking a mutex.", err); + tor_fragile_assert(); + } } /** Free all storage held by the lock <b>m</b>. */ void tor_mutex_free(tor_mutex_t *m) { + int err; tor_assert(m); - pthread_mutex_destroy(&m->mutex); + err = pthread_mutex_destroy(&m->mutex); + if (PREDICT_UNLIKELY(err)) { + log_err(LD_GENERAL, "Error %d destroying a mutex.", err); + tor_fragile_assert(); + } tor_free(m); } /** Return an integer representing this thread. */ |