aboutsummaryrefslogtreecommitdiff
path: root/include/salticidae/event.h
diff options
context:
space:
mode:
authorDeterminant <ted.sybil@gmail.com>2019-03-26 16:05:01 -0400
committerDeterminant <ted.sybil@gmail.com>2019-03-26 16:05:01 -0400
commita4015bde81371a8b998361ccfb56d5fd714e3ec6 (patch)
tree50ce32f6779fdf22c7e2556c6be5a550283cfb60 /include/salticidae/event.h
parentea6ae75fccad52d116559f320d6f0069c1ad552b (diff)
update atomic fences
Diffstat (limited to 'include/salticidae/event.h')
-rw-r--r--include/salticidae/event.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/include/salticidae/event.h b/include/salticidae/event.h
index fafa884..b97ab9a 100644
--- a/include/salticidae/event.h
+++ b/include/salticidae/event.h
@@ -481,6 +481,7 @@ class ThreadCall {
}
template<typename T>
void set_result(T &&data) {
+ std::atomic_thread_fence(std::memory_order_release);
using _T = std::remove_reference_t<T>;
result = Result(new _T(std::forward<T>(data)),
[](void *ptr) {delete static_cast<_T *>(ptr);});
@@ -591,7 +592,7 @@ class MPSCQueueEventDriven: public MPSCQueue<T> {
template<typename U>
bool try_enqueue(U &&e) {
static const uint64_t dummy = 1;
- if (!MPMCQueue<T>::try_enqueue(std::forward<U>(e)))
+ if (!MPSCQueue<T>::try_enqueue(std::forward<U>(e)))
return false;
// memory barrier here, so any load/store in enqueue must be finialized
if (wait_sig.exchange(false, std::memory_order_acq_rel))