Skip to content

Commit 4469f9b

Browse files
committed
Dom: bug fix
1 parent d798e2a commit 4469f9b

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

src/domino/Domino.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,9 @@ Domino::Event Domino::newEvent(const EvName& aEvName) noexcept
114114
HID("(Domino) init new EvName=" << aEvName << ", event=" << newEv);
115115
en_ev_[aEvName] = newEv;
116116
ev_en_[newEv] = aEvName;
117-
states_.push_back(false);
117+
if (newEv >= states_.size())
118+
states_.push_back(false); // create new slot
119+
118120
return newEv;
119121
}
120122

ut/domino/RmEvDomTest.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,25 @@ TYPED_TEST_P(RmDomTest, GOLD_reuse_ev)
7373
EXPECT_EQ(0u, evs.count(PARA_DOM->newEvent("e100"))) << "REQ: recycle used-up, create new.";
7474
}
7575

76+
TYPED_TEST_P(RmDomTest, bugFix_recycleShallNotGrowInternalStateSpace)
77+
{
78+
const auto reusedEv = PARA_DOM->newEvent("reused ev");
79+
80+
constexpr size_t nRound = 128;
81+
for (size_t i = 0; i < nRound; ++i)
82+
{
83+
EXPECT_TRUE(PARA_DOM->rmEvOK("reused ev")) << "REQ: can remove existing ev each round";
84+
EXPECT_EQ(reusedEv, PARA_DOM->newEvent("reused ev")) << "REQ: shall reuse same removed ev id";
85+
}
86+
87+
const auto freshEv = PARA_DOM->newEvent("fresh ev");
88+
EXPECT_EQ(reusedEv + 1, freshEv) << "REQ: repeated recycle shall not inflate internal event space";
89+
}
90+
7691
REGISTER_TYPED_TEST_SUITE_P(RmDomTest
7792
, GOLD_rm_dom_resrc
7893
, GOLD_reuse_ev
94+
, bugFix_recycleShallNotGrowInternalStateSpace
7995
);
8096
using AnyRmDom = Types<MinRmEvDom, MaxNofreeDom, MaxDom>;
8197
INSTANTIATE_TYPED_TEST_SUITE_P(PARA, RmDomTest, AnyRmDom);

0 commit comments

Comments
 (0)