Skip to content

Commit 9322b5e

Browse files
committed
fix helium where deferred object commits were not cleared after flush
1 parent 88e72ea commit 9322b5e

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

src/helium/utility/DeferredCommitBuffer.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ DeferredCommitBuffer::DeferredCommitBuffer()
3232

3333
DeferredCommitBuffer::~DeferredCommitBuffer()
3434
{
35-
clear();
35+
clearImpl();
3636
}
3737

3838
void DeferredCommitBuffer::addObjectToCommit(BaseObject *obj)
@@ -54,6 +54,7 @@ void DeferredCommitBuffer::flush()
5454
std::lock_guard<std::recursive_mutex> guard(m_mutex);
5555
flushCommits();
5656
flushFinalizations();
57+
clearImpl();
5758
}
5859

5960
TimeStamp DeferredCommitBuffer::lastObjectCommit() const
@@ -69,13 +70,7 @@ TimeStamp DeferredCommitBuffer::lastObjectFinalization() const
6970
void DeferredCommitBuffer::clear()
7071
{
7172
std::lock_guard<std::recursive_mutex> guard(m_mutex);
72-
73-
for (auto &obj : m_commitBuffer)
74-
obj->refDec(RefType::INTERNAL);
75-
for (auto &obj : m_finalizationBuffer)
76-
obj->refDec(RefType::INTERNAL);
77-
m_commitBuffer.clear();
78-
m_finalizationBuffer.clear();
73+
clearImpl();
7974
}
8075

8176
bool DeferredCommitBuffer::empty() const
@@ -141,4 +136,15 @@ void DeferredCommitBuffer::flushFinalizations()
141136
m_lastFinalization = newTimeStamp();
142137
}
143138

139+
void DeferredCommitBuffer::clearImpl()
140+
{
141+
for (auto &obj : m_commitBuffer)
142+
obj->refDec(RefType::INTERNAL);
143+
for (auto &obj : m_finalizationBuffer)
144+
obj->refDec(RefType::INTERNAL);
145+
m_commitBuffer.clear();
146+
m_finalizationBuffer.clear();
147+
m_needToSortFinalizations = false;
148+
}
149+
144150
} // namespace helium

src/helium/utility/DeferredCommitBuffer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ struct DeferredCommitBuffer
4646
void addObjectToFinalizeImpl(BaseObject *obj);
4747
void flushCommits();
4848
void flushFinalizations();
49+
void clearImpl();
4950

5051
std::vector<BaseObject *> m_commitBuffer;
5152
std::vector<BaseObject *> m_finalizationBuffer;

0 commit comments

Comments
 (0)