summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2007-03-17 21:09:49 +0000
committerNick Mathewson <nickm@torproject.org>2007-03-17 21:09:49 +0000
commitf8f5ea10de84dc777ec0a6edb084fb0dda7e7057 (patch)
treedad404c6e937e05401d445e310d3c7fc5467f1d6
parent194e0ae1042059c0b3090b5ea9678013935c7fb7 (diff)
downloadtor-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--ChangeLog3
-rw-r--r--src/common/compat.c28
2 files changed, 26 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index f748720a5e..bdadfa504f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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. */