From 6b2ae4bb388581c7ce060103ae868ed12f5b74ce Mon Sep 17 00:00:00 2001 From: lyriccoder Date: Wed, 17 Sep 2025 10:32:25 +0300 Subject: [PATCH 1/4] Fix warning --- src/collective/loop.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/collective/loop.h b/src/collective/loop.h index 0a830eb960b1..313e9d3c064b 100644 --- a/src/collective/loop.h +++ b/src/collective/loop.h @@ -84,9 +84,12 @@ class Loop { explicit Loop(std::chrono::seconds timeout); - ~Loop() noexcept(false) { - // The worker will be joined in the stop function. - this->Stop(); - } +~Loop() noexcept { + try { + this->Stop(); + } catch (...) { + // Log or swallow exception, but do not propagate + } + } }; } // namespace xgboost::collective From a132291b4f849dfc5062e928185225350059ae8f Mon Sep 17 00:00:00 2001 From: lyriccoder Date: Fri, 19 Sep 2025 10:36:20 +0300 Subject: [PATCH 2/4] Fix comments --- src/collective/loop.h | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/collective/loop.h b/src/collective/loop.h index 313e9d3c064b..5216c985b940 100644 --- a/src/collective/loop.h +++ b/src/collective/loop.h @@ -72,7 +72,7 @@ class Loop { /** * @brief Stop the worker thread. */ - Result Stop(); + Result Stop(bool from_destructor = false); void Submit(Op op); @@ -84,12 +84,10 @@ class Loop { explicit Loop(std::chrono::seconds timeout); -~Loop() noexcept { - try { - this->Stop(); - } catch (...) { - // Log or swallow exception, but do not propagate - } - } + ~Loop() noexcept { + // The worker will be joined in the stop function. + this->Stop(true); + } + }; } // namespace xgboost::collective From 4fbd3ede7650561322e29e6a39bea2ef72b6d2d4 Mon Sep 17 00:00:00 2001 From: lyriccoder Date: Fri, 19 Sep 2025 10:36:40 +0300 Subject: [PATCH 3/4] Fix comments --- src/collective/loop.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/collective/loop.cc b/src/collective/loop.cc index 6949ebc53be8..2264af8394f1 100644 --- a/src/collective/loop.cc +++ b/src/collective/loop.cc @@ -199,7 +199,7 @@ void Loop::Process() { } } -Result Loop::Stop() { +Result Loop::Stop(bool from_destructor) { // Finish all remaining tasks CHECK_EQ(this->Block().OK(), this->rc_.OK()); @@ -214,7 +214,19 @@ Result Loop::Stop() { } if (curr_exce_) { - std::rethrow_exception(curr_exce_); + if (from_destructor) { + // Из деструктора - возвращаем ошибку через Result + try { + std::rethrow_exception(curr_exce_); + } catch (const std::exception& e) { + return Fail("Exception in loop: " + std::string(e.what())); + } catch (...) { + return Fail("Unknown exception in loop"); + } + } else { + // Обычный вызов - бросаем исключение как раньше + std::rethrow_exception(curr_exce_); + } } return Success(); From 222322495edb0e862bb9438f16715cf46928b51c Mon Sep 17 00:00:00 2001 From: lyriccoder Date: Fri, 19 Sep 2025 10:37:37 +0300 Subject: [PATCH 4/4] Update loop.cc --- src/collective/loop.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/collective/loop.cc b/src/collective/loop.cc index 2264af8394f1..f284efcc0763 100644 --- a/src/collective/loop.cc +++ b/src/collective/loop.cc @@ -215,7 +215,6 @@ Result Loop::Stop(bool from_destructor) { if (curr_exce_) { if (from_destructor) { - // Из деструктора - возвращаем ошибку через Result try { std::rethrow_exception(curr_exce_); } catch (const std::exception& e) { @@ -224,7 +223,6 @@ Result Loop::Stop(bool from_destructor) { return Fail("Unknown exception in loop"); } } else { - // Обычный вызов - бросаем исключение как раньше std::rethrow_exception(curr_exce_); } }