Skip to content

Commit 8129d05

Browse files
Add expiration check in fragile_ptr (#258)
Signed-off-by: Carlosespicur <[email protected]>
1 parent 1835b97 commit 8129d05

File tree

1 file changed

+80
-20
lines changed

1 file changed

+80
-20
lines changed

src/cpp/database/database.cpp

+80-20
Original file line numberDiff line numberDiff line change
@@ -4359,7 +4359,10 @@ const std::vector<std::shared_ptr<const Entity>> Database::get_entities_nts(
43594359
case EntityKind::USER:
43604360
for (const auto& user : host->users)
43614361
{
4362-
entities.push_back(user.second);
4362+
if (!user.second.expired())
4363+
{
4364+
entities.push_back(user.second);
4365+
}
43634366
}
43644367
break;
43654368
case EntityKind::PROCESS:
@@ -4394,7 +4397,10 @@ const std::vector<std::shared_ptr<const Entity>> Database::get_entities_nts(
43944397
case EntityKind::PROCESS:
43954398
for (const auto& process : user->processes)
43964399
{
4397-
entities.push_back(process.second);
4400+
if (!process.second.expired())
4401+
{
4402+
entities.push_back(process.second);
4403+
}
43984404
}
43994405
break;
44004406
case EntityKind::DOMAIN:
@@ -4426,15 +4432,21 @@ const std::vector<std::shared_ptr<const Entity>> Database::get_entities_nts(
44264432
}
44274433
break;
44284434
case EntityKind::USER:
4429-
entities.push_back(process->user);
4435+
if (!process->user.expired())
4436+
{
4437+
entities.push_back(process->user);
4438+
}
44304439
break;
44314440
case EntityKind::PROCESS:
44324441
entities.push_back(process);
44334442
break;
44344443
case EntityKind::PARTICIPANT:
44354444
for (const auto& participant : process->participants)
44364445
{
4437-
entities.push_back(participant.second);
4446+
if (!participant.second.expired())
4447+
{
4448+
entities.push_back(participant.second);
4449+
}
44384450
}
44394451
break;
44404452
case EntityKind::DOMAIN:
@@ -4464,13 +4476,19 @@ const std::vector<std::shared_ptr<const Entity>> Database::get_entities_nts(
44644476
case EntityKind::PARTICIPANT:
44654477
for (const auto& participant : domain->participants)
44664478
{
4467-
entities.push_back(participant.second);
4479+
if (!participant.second.expired())
4480+
{
4481+
entities.push_back(participant.second);
4482+
}
44684483
}
44694484
break;
44704485
case EntityKind::TOPIC:
44714486
for (const auto& topic : domain->topics)
44724487
{
4473-
entities.push_back(topic.second);
4488+
if (!topic.second.expired())
4489+
{
4490+
entities.push_back(topic.second);
4491+
}
44744492
}
44754493
break;
44764494
case EntityKind::HOST:
@@ -4515,21 +4533,30 @@ const std::vector<std::shared_ptr<const Entity>> Database::get_entities_nts(
45154533
}
45164534
break;
45174535
case EntityKind::DOMAIN:
4518-
entities.push_back(participant->domain);
4536+
if (!participant->domain.expired())
4537+
{
4538+
entities.push_back(participant->domain);
4539+
}
45194540
break;
45204541
case EntityKind::PARTICIPANT:
45214542
entities.push_back(participant);
45224543
break;
45234544
case EntityKind::DATAWRITER:
45244545
for (const auto& writer : participant->data_writers)
45254546
{
4526-
entities.push_back(writer.second);
4547+
if (!writer.second.expired())
4548+
{
4549+
entities.push_back(writer.second);
4550+
}
45274551
}
45284552
break;
45294553
case EntityKind::DATAREADER:
45304554
for (const auto& reader : participant->data_readers)
45314555
{
4532-
entities.push_back(reader.second);
4556+
if (!reader.second.expired())
4557+
{
4558+
entities.push_back(reader.second);
4559+
}
45334560
}
45344561
break;
45354562
case EntityKind::TOPIC:
@@ -4556,21 +4583,30 @@ const std::vector<std::shared_ptr<const Entity>> Database::get_entities_nts(
45564583
switch (entity_kind)
45574584
{
45584585
case EntityKind::DOMAIN:
4559-
entities.push_back(topic->domain);
4586+
if (!topic->domain.expired())
4587+
{
4588+
entities.push_back(topic->domain);
4589+
}
45604590
break;
45614591
case EntityKind::TOPIC:
45624592
entities.push_back(topic);
45634593
break;
45644594
case EntityKind::DATAWRITER:
45654595
for (const auto& writer : topic->data_writers)
45664596
{
4567-
entities.push_back(writer.second);
4597+
if (!writer.second.expired())
4598+
{
4599+
entities.push_back(writer.second);
4600+
}
45684601
}
45694602
break;
45704603
case EntityKind::DATAREADER:
45714604
for (const auto& reader : topic->data_readers)
45724605
{
4573-
entities.push_back(reader.second);
4606+
if (!reader.second.expired())
4607+
{
4608+
entities.push_back(reader.second);
4609+
}
45744610
}
45754611
break;
45764612
case EntityKind::HOST:
@@ -4600,18 +4636,27 @@ const std::vector<std::shared_ptr<const Entity>> Database::get_entities_nts(
46004636
switch (entity_kind)
46014637
{
46024638
case EntityKind::TOPIC:
4603-
entities.push_back(writer->topic);
4639+
if (!writer->topic.expired())
4640+
{
4641+
entities.push_back(writer->topic);
4642+
}
46044643
break;
46054644
case EntityKind::PARTICIPANT:
4606-
entities.push_back(writer->participant);
4645+
if (!writer->participant.expired())
4646+
{
4647+
entities.push_back(writer->participant);
4648+
}
46074649
break;
46084650
case EntityKind::DATAWRITER:
46094651
entities.push_back(writer);
46104652
break;
46114653
case EntityKind::LOCATOR:
46124654
for (const auto& locator : writer->locators)
46134655
{
4614-
entities.push_back(locator.second);
4656+
if (!locator.second.expired())
4657+
{
4658+
entities.push_back(locator.second);
4659+
}
46154660
}
46164661
break;
46174662
case EntityKind::DATAREADER:
@@ -4640,18 +4685,27 @@ const std::vector<std::shared_ptr<const Entity>> Database::get_entities_nts(
46404685
switch (entity_kind)
46414686
{
46424687
case EntityKind::TOPIC:
4643-
entities.push_back(reader->topic);
4688+
if (!reader->topic.expired())
4689+
{
4690+
entities.push_back(reader->topic);
4691+
}
46444692
break;
46454693
case EntityKind::PARTICIPANT:
4646-
entities.push_back(reader->participant);
4694+
if (!reader->participant.expired())
4695+
{
4696+
entities.push_back(reader->participant);
4697+
}
46474698
break;
46484699
case EntityKind::DATAREADER:
46494700
entities.push_back(reader);
46504701
break;
46514702
case EntityKind::LOCATOR:
46524703
for (const auto& locator : reader->locators)
46534704
{
4654-
entities.push_back(locator.second);
4705+
if (!locator.second.expired())
4706+
{
4707+
entities.push_back(locator.second);
4708+
}
46554709
}
46564710
break;
46574711
case EntityKind::DATAWRITER:
@@ -4682,13 +4736,19 @@ const std::vector<std::shared_ptr<const Entity>> Database::get_entities_nts(
46824736
case EntityKind::DATAREADER:
46834737
for (const auto& reader : locator->data_readers)
46844738
{
4685-
entities.push_back(reader.second);
4739+
if (!reader.second.expired())
4740+
{
4741+
entities.push_back(reader.second);
4742+
}
46864743
}
46874744
break;
46884745
case EntityKind::DATAWRITER:
46894746
for (const auto& writer : locator->data_writers)
46904747
{
4691-
entities.push_back(writer.second);
4748+
if (!writer.second.expired())
4749+
{
4750+
entities.push_back(writer.second);
4751+
}
46924752
}
46934753
break;
46944754
case EntityKind::LOCATOR:

0 commit comments

Comments
 (0)