- xbt_assert(refcount_ > 0,
- "This activity has a negative refcount! You can only call test() or wait() once per activity.");
-
- // Atomic operation! Do not split in two instructions!
- auto count = --refcount_;
- if (count == 0)
- delete this;
+ if (activity->refcount_.fetch_sub(1, std::memory_order_release) == 1) {
+ std::atomic_thread_fence(std::memory_order_acquire);
+ delete activity;
+ }
+}
+}