aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorarkady-e1ppa <arkady-e1ppa@yandex-team.com>2024-11-14 09:18:54 +0300
committerarkady-e1ppa <arkady-e1ppa@yandex-team.com>2024-11-14 09:29:56 +0300
commitd225e2343d59698ea86585da575d40e9eb14159c (patch)
tree343bdff50f57c641d96f3c3f55ebfe9df5aa375c
parent14559389ace814f895db4ee116d884ae70bc7469 (diff)
downloadydb-d225e2343d59698ea86585da575d40e9eb14159c.tar.gz
YT-23469: Ensure proper destructor order inside |RunInFiberContext| even when exception is thrown
commit_hash:5dde84deb176c7a4be831d9870deab45f66d1237
-rw-r--r--yt/yt/core/concurrency/fiber_scheduler_thread.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/yt/yt/core/concurrency/fiber_scheduler_thread.cpp b/yt/yt/core/concurrency/fiber_scheduler_thread.cpp
index 4c1509d8ca..441d093a4c 100644
--- a/yt/yt/core/concurrency/fiber_scheduler_thread.cpp
+++ b/yt/yt/core/concurrency/fiber_scheduler_thread.cpp
@@ -983,9 +983,13 @@ Y_NO_INLINE void RunInFiberContext(TFiber* fiber, TClosure callback)
{
TFiberSwitchHandler switchHandler(fiber);
TNullPropagatingStorageGuard nullPropagatingStorageGuard;
+
+ auto cleanup = Finally([&callback] {
+ // To ensure callback is destroyed before switchHandler.
+ callback.Reset();
+ });
+
callback();
- // To ensure callback is destroyed before switchHandler.
- callback.Reset();
}
////////////////////////////////////////////////////////////////////////////////