diff options
author | Determinant <ted.sybil@gmail.com> | 2019-03-26 16:05:01 -0400 |
---|---|---|
committer | Determinant <ted.sybil@gmail.com> | 2019-03-26 16:05:01 -0400 |
commit | a4015bde81371a8b998361ccfb56d5fd714e3ec6 (patch) | |
tree | 50ce32f6779fdf22c7e2556c6be5a550283cfb60 /include/salticidae/event.h | |
parent | ea6ae75fccad52d116559f320d6f0069c1ad552b (diff) |
update atomic fences
Diffstat (limited to 'include/salticidae/event.h')
-rw-r--r-- | include/salticidae/event.h | 3 |
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)) |