aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/actors/testlib
diff options
context:
space:
mode:
authora-sumin <a-sumin@yandex-team.com>2023-06-07 15:51:22 +0300
committera-sumin <a-sumin@yandex-team.com>2023-06-07 15:51:22 +0300
commit668b4b0738d0884b52e9212ea4ea1b78e5056937 (patch)
treedef96e2a92e5e116fa2975d9c8fdcb519649d4e9 /library/cpp/actors/testlib
parentcb91ffc1454a6cc69c96fbba4f532454dc4cf747 (diff)
downloadydb-668b4b0738d0884b52e9212ea4ea1b78e5056937.tar.gz
Fix memory leak in TActorSystem
Diffstat (limited to 'library/cpp/actors/testlib')
-rw-r--r--library/cpp/actors/testlib/test_runtime.cpp14
-rw-r--r--library/cpp/actors/testlib/test_runtime.h24
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;