We should assert that event_base is non-null in tor_libevent_get_base(), to avoid annoying bugs. (Libevent 2.0 will fail gently in this case, whereas libevent 1.4 will fail hard and confusingly).
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Child items
0
Show closed items
No child items are currently assigned. Use child items to break down this issue into smaller parts.
Linked items
0
Link issues together to show that they're related.
Learn more.
This might break a whole lot of unit tests, as many of them don't initialise event_base, and then generate a whole lot of warnings about it being NULL.
(So we should fix the unit tests at the same time.)
It happens on OS X 10.11.3 arch x86_64 using Apple LLVM version 7.0.2 (clang-700.1.81).
I'm using ./configure --disable-asciidoc --with-libevent-dir=/opt/local --with-openssl-dir=/opt/local.
This commit has issues, but the 0.2.8.1-alpha tarball in your volatile directory does not.
I can try to debug further.
The infinite chain of log messages makes me think it's hitting an assertion failure before the logging subsystem is initialized. That makes us fail to get the logging lock, which makes us assert, which makes us try to log the assertion....
It turns out that the log mutex isn't initialised the first time logv() is called.
This causes logv to fail a tor_assert in LOCK_LOGS(), which calls logv()...
Please see my branch check_log_mutex for:
the check that exposes this issue,
further checks that ensure we don't log when SMARTLIST_DEBUG is defined,
a change to the initialiser order so we init logs first (should we do this in tor, too?)
I needed to cherry-pick 1bac468882fd732460d8a25735131d632f977bfe to get this branch to work.
tor_mutex_init() can still call tor_assert if it fails, so the possibility of this stack overflow still exists when we're initialising the log mutex itself.
What do you want to do about that one?
Uncherrypicked the cherry-picked paert, and merged the rest to master. Could you please open another ticket for why we shouldn't assert from inside assert or log from inside log?