|
@ -657,26 +657,26 @@ void TorController::reconnect_cb(evutil_socket_t fd, short what, void *arg) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/****** Thread ********/ |
|
|
/****** Thread ********/ |
|
|
struct event_base *base; |
|
|
struct event_base *gBase; |
|
|
boost::thread torControlThread; |
|
|
boost::thread torControlThread; |
|
|
|
|
|
|
|
|
static void TorControlThread() |
|
|
static void TorControlThread() |
|
|
{ |
|
|
{ |
|
|
TorController ctrl(base, GetArg("-torcontrol", DEFAULT_TOR_CONTROL)); |
|
|
TorController ctrl(gBase, GetArg("-torcontrol", DEFAULT_TOR_CONTROL)); |
|
|
|
|
|
|
|
|
event_base_dispatch(base); |
|
|
event_base_dispatch(gBase); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void StartTorControl(boost::thread_group& threadGroup, CScheduler& scheduler) |
|
|
void StartTorControl(boost::thread_group& threadGroup, CScheduler& scheduler) |
|
|
{ |
|
|
{ |
|
|
assert(!base); |
|
|
assert(!gBase); |
|
|
#ifdef WIN32 |
|
|
#ifdef WIN32 |
|
|
evthread_use_windows_threads(); |
|
|
evthread_use_windows_threads(); |
|
|
#else |
|
|
#else |
|
|
evthread_use_pthreads(); |
|
|
evthread_use_pthreads(); |
|
|
#endif |
|
|
#endif |
|
|
base = event_base_new(); |
|
|
gBase = event_base_new(); |
|
|
if (!base) { |
|
|
if (!gBase) { |
|
|
LogPrintf("tor: Unable to create event_base\n"); |
|
|
LogPrintf("tor: Unable to create event_base\n"); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
@ -686,18 +686,18 @@ void StartTorControl(boost::thread_group& threadGroup, CScheduler& scheduler) |
|
|
|
|
|
|
|
|
void InterruptTorControl() |
|
|
void InterruptTorControl() |
|
|
{ |
|
|
{ |
|
|
if (base) { |
|
|
if (gBase) { |
|
|
LogPrintf("tor: Thread interrupt\n"); |
|
|
LogPrintf("tor: Thread interrupt\n"); |
|
|
event_base_loopbreak(base); |
|
|
event_base_loopbreak(gBase); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void StopTorControl() |
|
|
void StopTorControl() |
|
|
{ |
|
|
{ |
|
|
if (base) { |
|
|
if (gBase) { |
|
|
torControlThread.join(); |
|
|
torControlThread.join(); |
|
|
event_base_free(base); |
|
|
event_base_free(gBase); |
|
|
base = 0; |
|
|
gBase = 0; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|