[tor-dev] Embedding tor in an application and using tor without opening a port

Nick Mathewson nickm at alum.mit.edu
Mon Apr 15 15:01:04 UTC 2013


On Mon, Apr 15, 2013 at 1:37 AM, Navin Francis
<navin.kurupacheril at gmail.com> wrote:
> I thought Tor already had some level of locking since multiple applications
> can connect to it at the same time via SOCKS. I completely agree about
> replacing the macros though.

Tor isn't multithreaded like that. Its main thread uses an asynchonous
event loop.  Other threads are used for cryptography-related tasks.
Most of the data structures aren't locked, because they don't need to
be shared between threads.  Only the ones that need to get used for
inter-thread communication are locked.

Personally, if I were going to try to make an in-process C API for
Tor, I'd make a command queue structure that any thread could use to
asynchronously send commands to the main thread, so that the only
change you'd need to make in the main thread would be enough locking
to handle queued commands and to queue replies.  That way the codebase
changes would be much simpler.

In fact, that's how the controller interface works.

peace,
-- 
Nick


More information about the tor-dev mailing list