浏览代码

r12191@catbus: nickm | 2007-03-15 15:33:37 -0400
Check return values from pthread_mutex functions.


svn:r9862

Nick Mathewson 18 年之前
父节点
当前提交
f8f5ea10de
共有 2 个文件被更改,包括 26 次插入5 次删除
  1. 2 1
      ChangeLog
  2. 24 4
      src/common/compat.c

+ 2 - 1
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

+ 24 - 4
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. */