From a914bb24fae7048ecedeb7f3abd25e9bff26ce6d Mon Sep 17 00:00:00 2001 From: jp9000 Date: Tue, 3 Nov 2015 14:09:03 -0800 Subject: [PATCH] libobs/util: Add atomic functions for bool values --- libobs/util/threading-posix.c | 5 +++++ libobs/util/threading-windows.c | 5 +++++ libobs/util/threading.h | 2 ++ 3 files changed, 12 insertions(+) diff --git a/libobs/util/threading-posix.c b/libobs/util/threading-posix.c index 8e76f6cf1..a5444236d 100644 --- a/libobs/util/threading-posix.c +++ b/libobs/util/threading-posix.c @@ -261,6 +261,11 @@ bool os_atomic_compare_swap_long(volatile long *val, long old_val, long new_val) return __sync_bool_compare_and_swap(val, old_val, new_val); } +bool os_atomic_set_bool(volatile bool *ptr, bool val) +{ + return __sync_lock_test_and_set(ptr, val); +} + void os_set_thread_name(const char *name) { #if defined(__APPLE__) diff --git a/libobs/util/threading-windows.c b/libobs/util/threading-windows.c index 115d706f8..ab2fdb632 100644 --- a/libobs/util/threading-windows.c +++ b/libobs/util/threading-windows.c @@ -181,6 +181,11 @@ bool os_atomic_compare_swap_long(volatile long *val, long old_val, long new_val) return InterlockedCompareExchange(val, new_val, old_val) == old_val; } +bool os_atomic_set_bool(volatile bool *ptr, bool val) +{ + return (bool)InterlockedExchange8((volatile char*)ptr, (char)val); +} + #define VC_EXCEPTION 0x406D1388 #pragma pack(push,8) diff --git a/libobs/util/threading.h b/libobs/util/threading.h index 5c4dacaf9..f45291e3d 100644 --- a/libobs/util/threading.h +++ b/libobs/util/threading.h @@ -76,6 +76,8 @@ EXPORT long os_atomic_dec_long(volatile long *val); EXPORT bool os_atomic_compare_swap_long(volatile long *val, long old_val, long new_val); +EXPORT bool os_atomic_set_bool(volatile bool *ptr, bool val); + EXPORT void os_set_thread_name(const char *name);