diff options
| author | Douglas Rumbaugh <dbr4@psu.edu> | 2023-11-07 15:14:38 -0500 |
|---|---|---|
| committer | Douglas Rumbaugh <dbr4@psu.edu> | 2023-11-07 15:14:38 -0500 |
| commit | 355ddd7b595fce201c305caecea415ab325e170e (patch) | |
| tree | 6550deee7e66f54892d974da198c37a1cf67ac3a /include/framework/DynamicExtension.h | |
| parent | dca44ff5be67c279ffec11224bb2be74a042be18 (diff) | |
| download | dynamic-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.h | 23 |
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++; } } } |