|
|
|
@ -368,7 +368,9 @@ namespace libuv
|
|
|
|
|
OnTick(uv_check_t* t)
|
|
|
|
|
{
|
|
|
|
|
ticker_glue* ticker = static_cast<ticker_glue*>(t->data);
|
|
|
|
|
LoopCall(t, ticker->func);
|
|
|
|
|
ticker->func();
|
|
|
|
|
Loop* loop = static_cast<Loop*>(t->loop->data);
|
|
|
|
|
loop->FlushLogic();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
@ -841,11 +843,7 @@ namespace libuv
|
|
|
|
|
int
|
|
|
|
|
Loop::run()
|
|
|
|
|
{
|
|
|
|
|
uv_timer_start(
|
|
|
|
|
m_TickTimer,
|
|
|
|
|
[](uv_timer_t* t) { static_cast<Loop*>(t->loop->data)->FlushLogic(); },
|
|
|
|
|
1000,
|
|
|
|
|
1000);
|
|
|
|
|
m_EventLoopThreadID = std::this_thread::get_id();
|
|
|
|
|
return uv_run(&m_Impl, UV_RUN_DEFAULT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -988,7 +986,6 @@ namespace libuv
|
|
|
|
|
void
|
|
|
|
|
Loop::stopped()
|
|
|
|
|
{
|
|
|
|
|
tick(50);
|
|
|
|
|
llarp::LogInfo("we have stopped");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1072,7 +1069,27 @@ namespace libuv
|
|
|
|
|
void
|
|
|
|
|
Loop::call_soon(std::function<void(void)> f)
|
|
|
|
|
{
|
|
|
|
|
m_LogicCalls.tryPushBack(f);
|
|
|
|
|
if (not m_EventLoopThreadID.has_value())
|
|
|
|
|
{
|
|
|
|
|
m_LogicCalls.tryPushBack(f);
|
|
|
|
|
uv_async_send(&m_WakeUp);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const auto inEventLoop = *m_EventLoopThreadID == std::this_thread::get_id();
|
|
|
|
|
|
|
|
|
|
while (m_LogicCalls.full() and inEventLoop)
|
|
|
|
|
{
|
|
|
|
|
FlushLogic();
|
|
|
|
|
}
|
|
|
|
|
if (inEventLoop)
|
|
|
|
|
{
|
|
|
|
|
if (m_LogicCalls.tryPushBack(f) != llarp::thread::QueueReturn::Success)
|
|
|
|
|
{
|
|
|
|
|
f();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
m_LogicCalls.pushBack(f);
|
|
|
|
|
uv_async_send(&m_WakeUp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|