From 54e10450cf93a57898533a16b0a76d8c0f04ff8d Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Tue, 10 Dec 2019 10:43:27 -0500 Subject: [PATCH] more cleanup --- llarp/context.cpp | 2 ++ llarp/ev/ev.cpp | 1 - llarp/ev/ev_libuv.cpp | 3 +-- llarp/util/thread/logic.cpp | 9 ++++++++- test/test_libabyss.cpp | 9 +++++---- 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/llarp/context.cpp b/llarp/context.cpp index 132904461..2181a7529 100644 --- a/llarp/context.cpp +++ b/llarp/context.cpp @@ -204,6 +204,8 @@ __ ___ ____ _ _ ___ _ _ ____ llarp::LogInfo("starting up"); mainloop = llarp_make_ev_loop(); + mainloop->set_logic(logic); + crypto = std::make_unique< sodium::CryptoLibSodium >(); cryptoManager = std::make_unique< CryptoManager >(crypto.get()); diff --git a/llarp/ev/ev.cpp b/llarp/ev/ev.cpp index c64aae81b..1611646d6 100644 --- a/llarp/ev/ev.cpp +++ b/llarp/ev/ev.cpp @@ -36,7 +36,6 @@ void llarp_ev_loop_run_single_process(llarp_ev_loop_ptr ev, std::shared_ptr< llarp::Logic > logic) { - ev->set_logic(logic); while(ev->running()) { ev->update_time(); diff --git a/llarp/ev/ev_libuv.cpp b/llarp/ev/ev_libuv.cpp index 47067bc92..6298ea5ac 100644 --- a/llarp/ev/ev_libuv.cpp +++ b/llarp/ev/ev_libuv.cpp @@ -806,8 +806,7 @@ namespace libuv m_LogicCaller.data = this; uv_async_init(&m_Impl, &m_LogicCaller, [](uv_async_t* h) { Loop* l = static_cast< Loop* >(h->data); - Queue_t* jobs = l->m_LogicCalls.load(); - l->m_LogicCalls.store(new Queue_t()); + Queue_t* jobs = l->m_LogicCalls.exchange(new Queue_t()); while(not jobs->empty()) { jobs->front()(); diff --git a/llarp/util/thread/logic.cpp b/llarp/util/thread/logic.cpp index 4c0ea2292..291a2c254 100644 --- a/llarp/util/thread/logic.cpp +++ b/llarp/util/thread/logic.cpp @@ -93,7 +93,14 @@ namespace llarp metrics::TimerGuard g("logic", std::string(TAG) + ":" + std::to_string(LINE)); #endif - self->m_Killer.TryAccess(func); + if(self->m_Queue) + { + func(); + } + else + { + self->m_Killer.TryAccess(func); + } }; if(can_flush()) { diff --git a/test/test_libabyss.cpp b/test/test_libabyss.cpp index d023a6f03..28625426e 100644 --- a/test/test_libabyss.cpp +++ b/test/test_libabyss.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include #include #include @@ -11,7 +11,7 @@ struct AbyssTestBase : public ::testing::Test { llarp::sodium::CryptoLibSodium crypto; - llarp_ev_loop_ptr loop = nullptr; + llarp_ev_loop_ptr loop = nullptr; std::shared_ptr< llarp::Logic > logic; abyss::httpd::BaseReqHandler* server = nullptr; abyss::http::JSONRPC* client = nullptr; @@ -46,8 +46,9 @@ struct AbyssTestBase : public ::testing::Test void Start() { - loop = llarp_make_ev_loop(); - logic = std::make_shared< llarp::Logic >(); + loop = llarp_make_ev_loop(); + logic = std::make_shared< llarp::Logic >(); + loop->set_logic(logic); sockaddr_in addr; addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); addr.sin_port = htons((llarp::randint() % 2000) + 2000);