tring to fix the thread race in BasicApp

Signed-off-by: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com>
This commit is contained in:
Pratik Mankawde
2026-02-16 16:49:29 +00:00
parent e4da8e87a7
commit cb40ed6f40
5 changed files with 20 additions and 9 deletions

View File

@@ -205,10 +205,10 @@ jobs:
- name: Set sanitizer options
if: ${{ !inputs.build_only && env.SANITIZERS_ENABLED == 'true' }}
run: |
echo "ASAN_OPTIONS=print_stacktrace=1:detect_container_overflow=0" >> ${GITHUB_ENV}
echo "ASAN_OPTIONS=print_stacktrace=1:detect_container_overflow=0:suppressions=${GITHUB_WORKSPACE}/sanitizers/suppressions/asan.supp" >> ${GITHUB_ENV}
echo "TSAN_OPTIONS=second_deadlock_stack=1:halt_on_error=0" >> ${GITHUB_ENV}
# echo "UBSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/sanitizers/suppressions/ubsan.supp" >> ${GITHUB_ENV}
# echo "LSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/sanitizers/suppressions/lsan.supp" >> ${GITHUB_ENV}
echo "UBSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/sanitizers/suppressions/ubsan.supp" >> ${GITHUB_ENV}
echo "LSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/sanitizers/suppressions/lsan.supp" >> ${GITHUB_ENV}
- name: Run the separate tests
if: ${{ !inputs.build_only }}

View File

@@ -31,7 +31,6 @@ race:src/test/jtx/impl/token.cpp
race:src/test/rpc/Book_test.cpp
race:src/xrpld/app/ledger/detail/InboundTransactions.cpp
race:src/xrpld/app/main/Application.cpp
race:src/xrpld/app/main/BasicApp.cpp
race:src/xrpld/app/main/GRPCServer.cpp
race:src/xrpld/app/misc/detail/AmendmentTable.cpp
race:src/xrpld/app/misc/FeeVoteImpl.cpp

View File

@@ -1035,6 +1035,8 @@ private:
bool
ApplicationImp::setup(boost::program_options::variables_map const& cmdline)
{
startIOThreads();
// We want to intercept CTRL-C and the standard termination signal SIGTERM
// and terminate the process. This handler will NEVER be invoked twice.
//

View File

@@ -4,15 +4,20 @@
#include <boost/asio/executor_work_guard.hpp>
BasicApp::BasicApp(std::size_t numberOfThreads)
BasicApp::BasicApp(std::size_t numberOfThreads) : numberOfThreads_(numberOfThreads)
{
work_.emplace(boost::asio::make_work_guard(io_context_));
threads_.reserve(numberOfThreads);
}
while (numberOfThreads--)
void
BasicApp::startIOThreads()
{
threads_.reserve(numberOfThreads_);
while (numberOfThreads_--)
{
threads_.emplace_back([this, numberOfThreads]() {
beast::setCurrentThreadName("io svc #" + std::to_string(numberOfThreads));
threads_.emplace_back([this, n = numberOfThreads_]() {
beast::setCurrentThreadName("io svc #" + std::to_string(n));
this->io_context_.run();
});
}

View File

@@ -13,6 +13,7 @@ private:
std::optional<boost::asio::executor_work_guard<boost::asio::io_context::executor_type>> work_;
std::vector<std::thread> threads_;
boost::asio::io_context io_context_;
std::size_t numberOfThreads_;
public:
BasicApp(std::size_t numberOfThreads);
@@ -23,4 +24,8 @@ public:
{
return io_context_;
}
protected:
void
startIOThreads();
};