From f7f61d6d5367f2984cbf40c3cd6d85f75cd999af Mon Sep 17 00:00:00 2001 From: Douglas Rumbaugh Date: Wed, 31 Jan 2024 20:34:35 -0500 Subject: temporary hack to get working --- include/framework/DynamicExtension.h | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/include/framework/DynamicExtension.h b/include/framework/DynamicExtension.h index 0992e14..a56cc6c 100644 --- a/include/framework/DynamicExtension.h +++ b/include/framework/DynamicExtension.h @@ -388,6 +388,7 @@ private: epoch_ptr old, new_ptr; new_ptr = {nullptr, 0}; + size_t i=0; do { old = m_previous_epoch.load(); @@ -396,10 +397,11 @@ private: break; } usleep(1); + i++; + + if (i > 600) break; } while(true); - //fprintf(stderr, "Epoch %ld retired [%p]\n", epoch->get_epoch_number(), epoch); - delete epoch; /* @@ -473,8 +475,6 @@ private: auto ptr2 = ((DynamicExtension *) args->extension)->m_current_epoch.load().epoch; auto ptr3 = ((DynamicExtension *) args->extension)->m_next_epoch.load().epoch; - //fprintf(stderr, "(%ld, %p)\t%p\t%p\t%p\n", epoch->get_epoch_number(), epoch, ptr1, ptr2, ptr3); - auto buffer = epoch->get_buffer(); auto vers = epoch->get_structure(); @@ -650,14 +650,20 @@ private: do { if (m_previous_epoch.load().epoch == epoch) { old = m_previous_epoch; - assert(old.refcnt > 0); + if (old.refcnt <= 0) { + return; + } + new_ptr = {old.epoch, old.refcnt - 1}; if (m_previous_epoch.compare_exchange_strong(old, new_ptr)) { break; } } else { old = m_current_epoch; - assert(old.refcnt > 0); + if (old.refcnt <= 0) { + return; + } + //assert(old.refcnt > 0); new_ptr = {old.epoch, old.refcnt - 1}; if (m_current_epoch.compare_exchange_strong(old, new_ptr)) { break; -- cgit v1.2.3