Very simple bug: the launch_thread function of torctl spawns two threads (self._thread and self._eventThread), but its close function only joins on self._eventThread [1]. The result is that the _thread lives a little longer (you can confirm this by checking threading.enumerate() after calling close):
1/19/2011 09:18:49 [INFO] [<_MainThread(MainThread, started -1216911680)>, <Thread(TorLoop, started daemon -1217868944)>]
This should be a trivial fix, though unfortunately it isn't the cause of the concurrency troubles I'm trying to track down. :(