diff options
| -rw-r--r-- | include/framework/DynamicExtension.h | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/include/framework/DynamicExtension.h b/include/framework/DynamicExtension.h index 89ee30f..40f137c 100644 --- a/include/framework/DynamicExtension.h +++ b/include/framework/DynamicExtension.h @@ -451,7 +451,7 @@ private: ((DynamicExtension *) args->extension)->advance_epoch(new_head); } - ((DynamicExtension *) args->extension)->m_reconstruction_scheduled = false; + ((DynamicExtension *) args->extension)->m_reconstruction_scheduled.store(false); delete args; } @@ -537,9 +537,12 @@ private: } int internal_append(const R &rec, bool ts) { - if (!m_reconstruction_scheduled.load() && m_buffer->is_at_low_watermark()) { - m_reconstruction_scheduled.store(true); - schedule_reconstruction(); + if (m_buffer->is_at_low_watermark()) { + auto old = false; + + if (m_reconstruction_scheduled.compare_exchange_strong(old, true)) { + schedule_reconstruction(); + } } /* this will fail if the HWM is reached and return 0 */ |