summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorDouglas Rumbaugh <dbr4@psu.edu>2024-01-31 20:34:35 -0500
committerDouglas Rumbaugh <dbr4@psu.edu>2024-01-31 20:34:35 -0500
commitf7f61d6d5367f2984cbf40c3cd6d85f75cd999af (patch)
tree7e3bb15afab0715ffa92f37917e65045e881d76e /include
parentf3b7428cfa7f9364c5a8bc85107db3a7cccd53bc (diff)
downloaddynamic-extension-f7f61d6d5367f2984cbf40c3cd6d85f75cd999af.tar.gz
temporary hack to get working
Diffstat (limited to 'include')
-rw-r--r--include/framework/DynamicExtension.h18
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;