diff --git a/src/xrpld/app/main/Application.cpp b/src/xrpld/app/main/Application.cpp index 6cf5e028ee..cb8547bfbe 100644 --- a/src/xrpld/app/main/Application.cpp +++ b/src/xrpld/app/main/Application.cpp @@ -235,7 +235,7 @@ public: //-------------------------------------------------------------------------- ApplicationImp(std::unique_ptr config, std::unique_ptr logs, std::unique_ptr timeKeeper) - : BasicApp(numberOfThreads(*config)) + : BasicApp(numberOfThreads(*config), DeferStart{}) , config_(std::move(config)) , logs_(std::move(logs)) , timeKeeper_(std::move(timeKeeper)) diff --git a/src/xrpld/app/main/BasicApp.cpp b/src/xrpld/app/main/BasicApp.cpp index 20fb5369d6..4ae5c04771 100644 --- a/src/xrpld/app/main/BasicApp.cpp +++ b/src/xrpld/app/main/BasicApp.cpp @@ -5,6 +5,12 @@ #include BasicApp::BasicApp(std::size_t numberOfThreads) : numberOfThreads_(numberOfThreads) +{ + work_.emplace(boost::asio::make_work_guard(io_context_)); + startIOThreads(); +} + +BasicApp::BasicApp(std::size_t numberOfThreads, DeferStart) : numberOfThreads_(numberOfThreads) { work_.emplace(boost::asio::make_work_guard(io_context_)); } diff --git a/src/xrpld/app/main/BasicApp.h b/src/xrpld/app/main/BasicApp.h index 779467f69e..fde5317680 100644 --- a/src/xrpld/app/main/BasicApp.h +++ b/src/xrpld/app/main/BasicApp.h @@ -26,6 +26,13 @@ public: } protected: + // Construct without starting threads. Derived classes must call + // startIOThreads() once construction is complete. + struct DeferStart + { + }; + BasicApp(std::size_t numberOfThreads, DeferStart); + void startIOThreads(); };