| Index: include/core/SkThread.h
|
| diff --git a/include/core/SkThread.h b/include/core/SkThread.h
|
| index 7e2c90ed519295d2f3d0a526c684a6034d3e5669..c8cd4e9112aad6492ece41d40c06ac8d628a8b37 100644
|
| --- a/include/core/SkThread.h
|
| +++ b/include/core/SkThread.h
|
| @@ -27,12 +27,6 @@ static int32_t sk_atomic_add(int32_t* addr, int32_t inc);
|
| */
|
| static int32_t sk_atomic_dec(int32_t* addr);
|
|
|
| -/** Atomically adds one to the int referenced by addr iff the referenced int was not 0
|
| - * and returns the previous value.
|
| - * No additional memory barrier is required; this must act as a compiler barrier.
|
| - */
|
| -static int32_t sk_atomic_conditional_inc(int32_t* addr);
|
| -
|
| /** Atomic compare and set.
|
| * If *addr == before, set *addr to after and return true, otherwise return false.
|
| * This must act as a release (SL/S) memory barrier and as a compiler barrier.
|
| @@ -51,6 +45,21 @@ static void sk_membar_acquire__after_atomic_conditional_inc();
|
|
|
| #include SK_ATOMICS_PLATFORM_H
|
|
|
| +/** Atomically adds one to the int referenced by addr iff the referenced int was not 0
|
| + * and returns the previous value.
|
| + * No additional memory barrier is required; this must act as a compiler barrier.
|
| + */
|
| +static inline int32_t sk_atomic_conditional_inc(int32_t* addr) {
|
| + int32_t prev;
|
| + do {
|
| + prev = *addr;
|
| + if (0 == prev) {
|
| + break;
|
| + }
|
| + } while (!sk_atomic_cas(addr, prev, prev+1));
|
| + return prev;
|
| +}
|
| +
|
| /** SK_MUTEX_PLATFORM_H must provide the following (or equivalent) declarations.
|
|
|
| class SkBaseMutex {
|
|
|