diff options
author | yumkam <yumkam7@ydb.tech> | 2025-07-02 13:21:57 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-02 13:21:57 +0300 |
commit | e733e66b3f052bee9e3c86406dddf2093a6c73b4 (patch) | |
tree | 30e992cdaa547a6f30c536648a2e239673addd68 | |
parent | 98a1ee00040f09f3ae3434468dab60e577eb27e3 (diff) | |
download | ydb-e733e66b3f052bee9e3c86406dddf2093a6c73b4.tar.gz |
[asan] core/kqp/ut/tx/kqp_locks_tricky_ut: fix out-of-scope use (#20461)
-rw-r--r-- | ydb/core/kqp/ut/tx/kqp_locks_tricky_ut.cpp | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/ydb/core/kqp/ut/tx/kqp_locks_tricky_ut.cpp b/ydb/core/kqp/ut/tx/kqp_locks_tricky_ut.cpp index 92c8cc06bc0..641c9f8ff88 100644 --- a/ydb/core/kqp/ut/tx/kqp_locks_tricky_ut.cpp +++ b/ydb/core/kqp/ut/tx/kqp_locks_tricky_ut.cpp @@ -17,6 +17,7 @@ #include <library/cpp/json/json_reader.h> #include <util/string/printf.h> +#include <util/generic/scope.h> namespace NKikimr::NKqp { @@ -62,7 +63,7 @@ Y_UNIT_TEST_SUITE(KqpLocksTricky) { bool blockResponses = true; auto grab = [&](TAutoPtr<IEventHandle> &ev) -> auto { - if (blockResponses && ev->GetTypeRewrite() == TEvKqpExecuter::TEvTxResponse::EventType) { + if (ev->GetTypeRewrite() == TEvKqpExecuter::TEvTxResponse::EventType && blockResponses) { auto* msg = ev->Get<TEvKqpExecuter::TEvTxResponse>(); UNIT_ASSERT_C(msg->Snapshot.IsValid(), "unexpected tx response reply without the snapshot"); executerResponses.emplace_back(ev.Release()); @@ -77,7 +78,10 @@ Y_UNIT_TEST_SUITE(KqpLocksTricky) { return executerResponses.size() > 0; }); - runtime.SetObserverFunc(grab); + auto saveObserver = runtime.SetObserverFunc(grab); + Y_DEFER { + runtime.SetObserverFunc(saveObserver); + }; auto future = kikimr.RunInThreadPool([&]{ auto txc = TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx(); @@ -181,7 +185,10 @@ Y_UNIT_TEST_SUITE(KqpLocksTricky) { return TTestActorRuntime::EEventAction::PROCESS; }; - runtime.SetObserverFunc(grab); + auto saveObserver = runtime.SetObserverFunc(grab); + Y_DEFER { + runtime.SetObserverFunc(saveObserver); + }; std::optional<TTransaction> tx; @@ -279,7 +286,7 @@ Y_UNIT_TEST_SUITE(KqpLocksTricky) { bool blockWrites = true; auto grab = [&](TAutoPtr<IEventHandle> &ev) -> auto { - if (blockWrites && ev->GetTypeRewrite() == NKikimr::NEvents::TDataEvents::TEvWrite::EventType) { + if (ev->GetTypeRewrite() == NKikimr::NEvents::TDataEvents::TEvWrite::EventType && blockWrites) { auto* evWrite = ev->Get<NKikimr::NEvents::TDataEvents::TEvWrite>(); UNIT_ASSERT(evWrite->Record.OperationsSize() == 0); UNIT_ASSERT(evWrite->Record.GetLocks().GetLocks().size() != 0); @@ -295,7 +302,10 @@ Y_UNIT_TEST_SUITE(KqpLocksTricky) { return writes.size() > 0; }); - runtime.SetObserverFunc(grab); + auto saveObserver = runtime.SetObserverFunc(grab); + Y_DEFER { + runtime.SetObserverFunc(saveObserver); + }; auto future = kikimr.RunInThreadPool([&]{ auto txc = TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx(); |