mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2025-12-20 14:00:10 +01:00
Win32: Implement init_once with InitOnceBeginInitialize / InitOnceComplete
This commit is contained in:
parent
ec2e879e0d
commit
ff4f2f4301
1 changed files with 32 additions and 0 deletions
|
|
@ -484,6 +484,36 @@ _cairo_atomic_ptr_cmpxchg_return_old_fallback(cairo_atomic_intptr_t *x, void *ol
|
||||||
(void) ret__; \
|
(void) ret__; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#if defined (_WIN32)
|
||||||
|
|
||||||
|
typedef INIT_ONCE cairo_atomic_once_t;
|
||||||
|
#define CAIRO_ATOMIC_ONCE_INIT INIT_ONCE_STATIC_INIT
|
||||||
|
|
||||||
|
static cairo_always_inline cairo_bool_t
|
||||||
|
_cairo_atomic_init_once_enter(cairo_atomic_once_t *once)
|
||||||
|
{
|
||||||
|
BOOL pending;
|
||||||
|
|
||||||
|
if (unlikely (!InitOnceBeginInitialize (once, 0, &pending, NULL))) {
|
||||||
|
assert (0 && "InitOnceBeginInitialize failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (likely (!pending))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static cairo_always_inline void
|
||||||
|
_cairo_atomic_init_once_leave(cairo_atomic_once_t *once)
|
||||||
|
{
|
||||||
|
if (unlikely (InitOnceComplete (once, 0, NULL))) {
|
||||||
|
assert (0 && "InitOnceComplete failed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
typedef cairo_atomic_int_t cairo_atomic_once_t;
|
typedef cairo_atomic_int_t cairo_atomic_once_t;
|
||||||
|
|
||||||
#define CAIRO_ATOMIC_ONCE_UNINITIALIZED (0)
|
#define CAIRO_ATOMIC_ONCE_UNINITIALIZED (0)
|
||||||
|
|
@ -515,6 +545,8 @@ _cairo_atomic_init_once_leave(cairo_atomic_once_t *once)
|
||||||
assert (0 && "incorrect use of _cairo_atomic_init_once API (once != CAIRO_ATOMIC_ONCE_INITIALIZING)");
|
assert (0 && "incorrect use of _cairo_atomic_init_once API (once != CAIRO_ATOMIC_ONCE_INITIALIZING)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* !_WIN32 */
|
||||||
|
|
||||||
CAIRO_END_DECLS
|
CAIRO_END_DECLS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue