diff options
| author | Douglas Rumbaugh <dbr4@psu.edu> | 2024-01-31 20:34:35 -0500 |
|---|---|---|
| committer | Douglas Rumbaugh <dbr4@psu.edu> | 2024-01-31 20:34:35 -0500 |
| commit | f7f61d6d5367f2984cbf40c3cd6d85f75cd999af (patch) | |
| tree | 7e3bb15afab0715ffa92f37917e65045e881d76e /include/framework | |
| parent | f3b7428cfa7f9364c5a8bc85107db3a7cccd53bc (diff) | |
| download | dynamic-extension-f7f61d6d5367f2984cbf40c3cd6d85f75cd999af.tar.gz | |
temporary hack to get working
Diffstat (limited to 'include/framework')
| -rw-r--r-- | include/framework/DynamicExtension.h | 18 |
1 files 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; |