summaryrefslogtreecommitdiff
path: root/libguile/atomics-internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/atomics-internal.h')
-rw-r--r--libguile/atomics-internal.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/libguile/atomics-internal.h b/libguile/atomics-internal.h
index dd1e71f10..f733aa55f 100644
--- a/libguile/atomics-internal.h
+++ b/libguile/atomics-internal.h
@@ -45,6 +45,12 @@ scm_atomic_compare_and_swap_uint32 (uint32_t *loc, uint32_t *expected,
atomic_uint_least32_t *a_loc = (atomic_uint_least32_t *) loc;
return atomic_compare_exchange_weak (a_loc, expected, desired);
}
+static inline size_t
+scm_atomic_subtract_size (size_t *loc, size_t arg)
+{
+ atomic_size_t *a_loc = (atomic_size_t *) loc;
+ return atomic_fetch_sub (a_loc, arg);
+}
static inline void
scm_atomic_set_pointer (void **loc, void *val)
{
@@ -131,6 +137,17 @@ scm_atomic_compare_and_swap_uint32 (uint32_t *loc, uint32_t *expected,
return ret;
}
+static inline size_t
+scm_atomic_subtract_size (size_t *loc, size_t arg)
+{
+ size_t ret;
+ scm_i_pthread_mutex_lock (&atomics_lock);
+ ret = *loc;
+ *loc -= arg;
+ scm_i_pthread_mutex_unlock (&atomics_lock);
+ return ret;
+}
+
static inline void
scm_atomic_set_pointer (void **loc, void *val)
{