summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2016-02-11 13:41:31 -0500
committerNick Mathewson <nickm@torproject.org>2016-02-11 13:41:31 -0500
commitfed8c5199a9fbc91a7476323c145c59e9e30e30c (patch)
treed1d45808191b6a1931eaa7a1b455870e0c34e55e /src/common
parent5a164d50bbfd66ef51408794d03c8db8071ddabb (diff)
parenta7a98e27eadff634655a7845976adc7a23dcdc3f (diff)
downloadtor-fed8c5199a9fbc91a7476323c145c59e9e30e30c.tar.gz
tor-fed8c5199a9fbc91a7476323c145c59e9e30e30c.zip
Merge branch 'check_log_mutex_uncherrypicked'
Diffstat (limited to 'src/common')
-rw-r--r--src/common/compat_libevent.c1
-rw-r--r--src/common/log.c13
2 files changed, 11 insertions, 3 deletions
diff --git a/src/common/compat_libevent.c b/src/common/compat_libevent.c
index 29e5c5f63c..c367ee4edb 100644
--- a/src/common/compat_libevent.c
+++ b/src/common/compat_libevent.c
@@ -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;
}
diff --git a/src/common/log.c b/src/common/log.c
index 4a8a7b1165..4779751543 100644
--- a/src/common/log.c
+++ b/src/common/log.c
@@ -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;
}