diff options
author | arkady-e1ppa <arkady-e1ppa@yandex-team.com> | 2024-11-14 09:18:54 +0300 |
---|---|---|
committer | arkady-e1ppa <arkady-e1ppa@yandex-team.com> | 2024-11-14 09:29:56 +0300 |
commit | d225e2343d59698ea86585da575d40e9eb14159c (patch) | |
tree | 343bdff50f57c641d96f3c3f55ebfe9df5aa375c | |
parent | 14559389ace814f895db4ee116d884ae70bc7469 (diff) | |
download | ydb-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.cpp | 8 |
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(); } //////////////////////////////////////////////////////////////////////////////// |