diff --git a/llarp/nodedb.cpp b/llarp/nodedb.cpp index 0b93ce6fd..5d51335d4 100644 --- a/llarp/nodedb.cpp +++ b/llarp/nodedb.cpp @@ -129,8 +129,13 @@ llarp_nodedb::InsertAsync(llarp::RouterContact rc, std::shared_ptr< llarp::Logic > logic, std::function< void(void) > completionHandler) { - disk->addJob( - std::bind(&handle_async_insert_rc, this, rc, logic, completionHandler)); + const auto job = std::bind(&handle_async_insert_rc, this, rc, logic, completionHandler); + size_t tries = 10; + while((!disk->addJob(job)) && tries-- > 0) + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + // on fail do synchronous write + if(tries == 0) + Insert(rc); } bool diff --git a/llarp/router/router.cpp b/llarp/router/router.cpp index a06463097..e5aa126b0 100644 --- a/llarp/router/router.cpp +++ b/llarp/router/router.cpp @@ -1534,8 +1534,17 @@ namespace llarp LogInfo("RPC Caller to ", lokidRPCAddr, " started"); } - cryptoworker->start(); - disk->start(); + if(!cryptoworker->start()) + { + LogError("crypto worker failed to start"); + return false; + } + + if(!disk->start()) + { + LogError("disk worker failed to start"); + return false; + } for(const auto &rc : bootstrapRCList) {