Commit fed8c519 authored by Nick Mathewson's avatar Nick Mathewson 🥔
Browse files

Merge branch 'check_log_mutex_uncherrypicked'

parents 5a164d50 a7a98e27
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
  o Minor features (robustness):
    - Exit immediately with an error message if the code attempts to
      use libevent without having initialized it. This should resolve
      some frequently-made mistakes in our unit tests. Closes ticket
      18241.
+1 −0
Original line number Diff line number Diff line
@@ -247,6 +247,7 @@ tor_libevent_initialize(tor_libevent_cfg *torcfg)
MOCK_IMPL(struct event_base *,
tor_libevent_get_base, (void))
{
  tor_assert(the_event_base != NULL);
  return the_event_base;
}

+10 −3
Original line number Diff line number Diff line
@@ -149,10 +149,14 @@ static int pretty_fn_has_parens = 0;

/** Lock the log_mutex to prevent others from changing the logfile_t list */
#define LOCK_LOGS() STMT_BEGIN                                          \
  tor_assert(log_mutex_initialized);                                    \
  tor_mutex_acquire(&log_mutex);                                        \
  STMT_END
/** Unlock the log_mutex */
#define UNLOCK_LOGS() STMT_BEGIN tor_mutex_release(&log_mutex); STMT_END
#define UNLOCK_LOGS() STMT_BEGIN                                        \
  tor_assert(log_mutex_initialized);                                    \
  tor_mutex_release(&log_mutex);                                        \
  STMT_END

/** What's the lowest log level anybody cares about?  Checking this lets us
 * bail out early from log_debug if we aren't debugging.  */
@@ -482,9 +486,12 @@ logv,(int severity, log_domain_mask_t domain, const char *funcname,
  /* check that severity is sane.  Overrunning the masks array leads to
   * interesting and hard to diagnose effects */
  assert(severity >= LOG_ERR && severity <= LOG_DEBUG);
  /* check that we've initialised the log mutex before we try to lock it */
  assert(log_mutex_initialized);
  LOCK_LOGS();

  if ((! (domain & LD_NOCB)) && smartlist_len(pending_cb_messages))
  if ((! (domain & LD_NOCB)) && pending_cb_messages
      && smartlist_len(pending_cb_messages))
    flush_pending_log_callbacks();

  if (queue_startup_messages &&
@@ -939,7 +946,7 @@ flush_pending_log_callbacks(void)
  smartlist_t *messages, *messages_tmp;

  LOCK_LOGS();
  if (0 == smartlist_len(pending_cb_messages)) {
  if (!pending_cb_messages || 0 == smartlist_len(pending_cb_messages)) {
    UNLOCK_LOGS();
    return;
  }
+3 −1
Original line number Diff line number Diff line
@@ -228,6 +228,9 @@ main(int c, const char **v)
  int loglevel = LOG_ERR;
  int accel_crypto = 0;

  /* We must initialise logs before we call tor_assert() */
  init_logging(1);

#ifdef USE_DMALLOC
  {
    int r = CRYPTO_set_mem_ex_functions(tor_malloc_, tor_realloc_, tor_free_);
@@ -244,7 +247,6 @@ main(int c, const char **v)
  tor_libevent_initialize(&cfg);

  control_initialize_event_queue();
  init_logging(1);
  configure_backtrace_handler(get_version());

  for (i_out = i = 1; i < c; ++i) {