mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-04-21 08:50:43 +02:00
[atomic] Provide mutex-based ptr cmpxchg
To handle those CPUs where we do not have an atomic cmpxchg.
This commit is contained in:
parent
a1d0a06b62
commit
4ae5e2d445
2 changed files with 16 additions and 0 deletions
|
|
@ -72,6 +72,9 @@ _cairo_atomic_int_dec_and_test (int *x);
|
|||
cairo_private int
|
||||
_cairo_atomic_int_cmpxchg (int *x, int oldv, int newv);
|
||||
|
||||
cairo_private void *
|
||||
_cairo_atomic_ptr_cmpxchg (void **x, void *oldv, void *newv);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -71,6 +71,19 @@ _cairo_atomic_int_cmpxchg (int *x, int oldv, int newv)
|
|||
return ret;
|
||||
}
|
||||
|
||||
void *
|
||||
_cairo_atomic_ptr_cmpxchg (void **x, void *oldv, void *newv)
|
||||
{
|
||||
void *ret;
|
||||
|
||||
CAIRO_MUTEX_LOCK (_cairo_atomic_mutex);
|
||||
ret = *x;
|
||||
if (ret == oldv)
|
||||
*x = newv;
|
||||
CAIRO_MUTEX_UNLOCK (_cairo_atomic_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ATOMIC_OP_NEEDS_MEMORY_BARRIER
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue