Commit 6c936331 authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

Specialize handling for mutexes allocated for condition variables

(These must not be reentrant mutexes with pthreads.)
parent 65016304
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -96,6 +96,22 @@ tor_mutex_init(tor_mutex_t *mutex)
    tor_fragile_assert();
  }
}

/** As tor_mutex_init, but initialize a mutex suitable for use with a
 * condition variable. */
void
tor_mutex_init_for_cond(tor_mutex_t *mutex)
{
  int err;
  if (PREDICT_UNLIKELY(!threads_initialized))
    tor_threads_init();
  err = pthread_mutex_init(&mutex->mutex, NULL);
  if (PREDICT_UNLIKELY(err)) {
    log_err(LD_GENERAL, "Error %d creating a mutex.", err);
    tor_fragile_assert();
  }
}

/** Wait until <b>m</b> is free, then acquire it. */
void
tor_mutex_acquire(tor_mutex_t *m)
+1 −0
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ typedef struct tor_mutex_t {

tor_mutex_t *tor_mutex_new(void);
void tor_mutex_init(tor_mutex_t *m);
void tor_mutex_init_for_cond(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);
+6 −0
Original line number Diff line number Diff line
@@ -48,6 +48,12 @@ tor_mutex_init(tor_mutex_t *m)
{
  InitializeCriticalSection(&m->mutex);
}
void
tor_mutex_init_for_cond(tor_mutex_t *m)
{
  InitializeCriticalSection(&m->mutex);
}

void
tor_mutex_uninit(tor_mutex_t *m)
{