diff options
author | a-sumin <a-sumin@yandex-team.com> | 2023-06-07 15:51:22 +0300 |
---|---|---|
committer | a-sumin <a-sumin@yandex-team.com> | 2023-06-07 15:51:22 +0300 |
commit | 668b4b0738d0884b52e9212ea4ea1b78e5056937 (patch) | |
tree | def96e2a92e5e116fa2975d9c8fdcb519649d4e9 /library/cpp/actors/testlib | |
parent | cb91ffc1454a6cc69c96fbba4f532454dc4cf747 (diff) | |
download | ydb-668b4b0738d0884b52e9212ea4ea1b78e5056937.tar.gz |
Fix memory leak in TActorSystem
Diffstat (limited to 'library/cpp/actors/testlib')
-rw-r--r-- | library/cpp/actors/testlib/test_runtime.cpp | 14 | ||||
-rw-r--r-- | library/cpp/actors/testlib/test_runtime.h | 24 |
2 files changed, 30 insertions, 8 deletions
diff --git a/library/cpp/actors/testlib/test_runtime.cpp b/library/cpp/actors/testlib/test_runtime.cpp index 6fedca1cd22..e093b2e6bf4 100644 --- a/library/cpp/actors/testlib/test_runtime.cpp +++ b/library/cpp/actors/testlib/test_runtime.cpp @@ -751,7 +751,7 @@ namespace NActors { VERBOSE = verbose; } - void TTestActorRuntimeBase::AddLocalService(const TActorId& actorId, const TActorSetupCmd& cmd, ui32 nodeIndex) { + void TTestActorRuntimeBase::AddLocalService(const TActorId& actorId, TActorSetupCmd cmd, ui32 nodeIndex) { Y_VERIFY(!IsInitialized); Y_VERIFY(nodeIndex < NodeCount); auto node = Nodes[nodeIndex + FirstNodeId]; @@ -760,8 +760,8 @@ namespace NActors { Nodes[nodeIndex + FirstNodeId] = node; } - node->LocalServicesActors[actorId] = cmd.Actor; - node->LocalServices.push_back(std::make_pair(actorId, cmd)); + node->LocalServicesActors[actorId] = cmd.Actor.get(); + node->LocalServices.push_back(std::make_pair(actorId, TTestActorSetupCmd(std::move(cmd)))); } void TTestActorRuntimeBase::InitNodes() { @@ -1684,7 +1684,9 @@ namespace NActors { const auto& interconnectCounters = GetCountersForComponent(node->DynamicCounters, "interconnect"); - setup->LocalServices = node->LocalServices; + for (const auto& cmd : node->LocalServices) { + setup->LocalServices.emplace_back(cmd.first, TActorSetupCmd(cmd.second.Actor, cmd.second.MailboxType, cmd.second.PoolId)); + } setup->Interconnect.ProxyActors.resize(FirstNodeId + NodeCount); const TActorId nameserviceId = GetNameserviceActorId(); @@ -1734,8 +1736,8 @@ namespace NActors { NActors::TLoggerActor *loggerActor = new NActors::TLoggerActor(node->LogSettings, logBackend, GetCountersForComponent(node->DynamicCounters, "utils")); NActors::TActorSetupCmd loggerActorCmd(loggerActor, NActors::TMailboxType::Simple, node->GetLoggerPoolId()); - std::pair<NActors::TActorId, NActors::TActorSetupCmd> loggerActorPair(node->LogSettings->LoggerActorId, loggerActorCmd); - setup->LocalServices.push_back(loggerActorPair); + std::pair<NActors::TActorId, NActors::TActorSetupCmd> loggerActorPair(node->LogSettings->LoggerActorId, std::move(loggerActorCmd)); + setup->LocalServices.push_back(std::move(loggerActorPair)); } return THolder<TActorSystem>(new TActorSystem(setup, node->GetAppData(), node->LogSettings)); diff --git a/library/cpp/actors/testlib/test_runtime.h b/library/cpp/actors/testlib/test_runtime.h index 0c1e4207cc7..12c99ba8e64 100644 --- a/library/cpp/actors/testlib/test_runtime.h +++ b/library/cpp/actors/testlib/test_runtime.h @@ -42,6 +42,26 @@ const TDuration DEFAULT_DISPATCH_TIMEOUT = NSan::PlainOrUnderSanitizer( namespace NActors { struct THeSingleSystemEnv { }; + struct TTestActorSetupCmd { // like TActorSetupCmd, but not owning the Actor + TTestActorSetupCmd(IActor* actor, TMailboxType::EType mailboxType, ui32 poolId) + : MailboxType(mailboxType) + , PoolId(poolId) + , Actor(actor) + { + } + + TTestActorSetupCmd(TActorSetupCmd cmd) + : MailboxType(cmd.MailboxType) + , PoolId(cmd.PoolId) + , Actor(cmd.Actor.release()) + { + } + + TMailboxType::EType MailboxType; + ui32 PoolId; + IActor* Actor; + }; + struct TEventMailboxId { TEventMailboxId() : NodeId(0) @@ -236,7 +256,7 @@ namespace NActors { TMonotonic GetCurrentMonotonicTime() const; void UpdateCurrentTime(TInstant newTime); void AdvanceCurrentTime(TDuration duration); - void AddLocalService(const TActorId& actorId, const TActorSetupCmd& cmd, ui32 nodeIndex = 0); + void AddLocalService(const TActorId& actorId, TActorSetupCmd cmd, ui32 nodeIndex = 0); virtual void Initialize(); ui32 GetNodeId(ui32 index = 0) const; ui32 GetNodeCount() const; @@ -574,7 +594,7 @@ namespace NActors { TIntrusivePtr<NInterconnect::TPollerThreads> Poller; volatile ui64* ActorSystemTimestamp; volatile ui64* ActorSystemMonotonic; - TVector<std::pair<TActorId, TActorSetupCmd> > LocalServices; + TVector<std::pair<TActorId, TTestActorSetupCmd>> LocalServices; TMap<TActorId, IActor*> LocalServicesActors; TMap<IActor*, TActorId> ActorToActorId; THolder<TMailboxTable> MailboxTable; |