/*
* Increment the series reference counter.
*/
-#define siridb_series_incref(series) series->ref++
+#define siridb_series_incref(series) __atomic_add_fetch(&(series)->ref, 1, __ATOMIC_SEQ_CST)
/*
* Decrement reference counter for series and free the series when zero is
* reached.
*/
#define siridb_series_decref(series__) \
- if (!--series__->ref) siridb__series_free(series__)
+ if (!__atomic_sub_fetch(&(series__)->ref, 1, __ATOMIC_SEQ_CST)) siridb__series_free(series__)
#define siridb_series_server_id(series) \
/*
* Increment the shard reference counter.
*/
-#define siridb_shard_incref(shard) shard->ref++
+#define siridb_shard_incref(shard) __atomic_add_fetch(&(shard)->ref, 1, __ATOMIC_SEQ_CST)
/*
* Decrement the reference counter, when 0 the shard will be destroyed.
* A signal can be raised in case closing the shard file fails.
*/
#define siridb_shard_decref(shard__) \
- if (!--shard__->ref) siridb__shard_free(shard__)
+ if (!__atomic_sub_fetch(&(shard__)->ref, 1, __ATOMIC_SEQ_CST)) siridb__shard_free(shard__)
#define siridb_shard_idx_file(Name__, Fn__) \
* Expects the object to have a object->ref (uint_xxx_t) on top of the
* objects definition.
*/
-#define vec_object_incref(object) ((vec_object_t * ) object)->ref++
+#define vec_object_incref(object) __atomic_add_fetch(&((vec_object_t * ) (object))->ref, 1, __ATOMIC_SEQ_CST)
/*
* Expects the object to have a object->ref (uint_xxx_t) on top of the
* there are still references left on the object since an object
* probably needs specific cleanup tasks.
*/
-#define vec_object_decref(object) ((vec_object_t * ) object)->ref--
+#define vec_object_decref(object) __atomic_sub_fetch(&((vec_object_t * ) (object))->ref, 1, __ATOMIC_SEQ_CST)
/*
* Append data to the list. This functions assumes the list can hold the new