summaryrefslogtreecommitdiffstats
path: root/include/framework/DynamicExtension.h
diff options
context:
space:
mode:
authorDouglas Rumbaugh <dbr4@psu.edu>2023-11-07 15:14:38 -0500
committerDouglas Rumbaugh <dbr4@psu.edu>2023-11-07 15:14:38 -0500
commit355ddd7b595fce201c305caecea415ab325e170e (patch)
tree6550deee7e66f54892d974da198c37a1cf67ac3a /include/framework/DynamicExtension.h
parentdca44ff5be67c279ffec11224bb2be74a042be18 (diff)
downloaddynamic-extension-355ddd7b595fce201c305caecea415ab325e170e.tar.gz
DynamicExtension: revised the way uneeded buffers/structures are released
Diffstat (limited to 'include/framework/DynamicExtension.h')
-rw-r--r--include/framework/DynamicExtension.h23
1 files changed, 15 insertions, 8 deletions
diff --git a/include/framework/DynamicExtension.h b/include/framework/DynamicExtension.h
index 233bebb..edbb6f5 100644
--- a/include/framework/DynamicExtension.h
+++ b/include/framework/DynamicExtension.h
@@ -271,6 +271,7 @@ private:
// the empty buffer added when the merge was first triggered is also included.
// Due to the reordering of operations in internal_append, the new buffer exists
// at the time of the clone, and so is already in the new epoch.
+ std::unique_lock<std::mutex> lk(m_struct_lock);
for (size_t i=old_buffer_cnt-1; i<old_epoch->get_buffers().size(); i++) {
new_epoch->add_buffer(old_epoch->get_buffers()[i]);
}
@@ -361,17 +362,23 @@ private:
* be safely freed.
*/
std::unique_lock<std::mutex> lock(m_struct_lock);
- for (auto buf : m_buffers) {
- if (buf->get_reference_count() == 0) {
- m_buffers.erase(buf);
- delete buf;
+ for (auto itr = m_buffers.begin(); itr != m_buffers.end();) {
+ if ((*itr)->get_reference_count() == 0) {
+ auto tmp = *itr;
+ itr = m_buffers.erase(itr);
+ delete tmp;
+ } else {
+ itr++;
}
}
- for (auto vers : m_versions) {
- if (vers->get_reference_count() == 0) {
- m_versions.erase(vers);
- delete vers;
+ for (auto itr = m_versions.begin(); itr != m_versions.end();) {
+ if ((*itr)->get_reference_count() == 0) {
+ auto tmp = *itr;
+ itr = m_versions.erase(itr);
+ delete tmp;
+ } else {
+ itr++;
}
}
}