diff options
author | Behdad Esfahbod <behdad@behdad.org> | 2008-05-26 20:28:23 -0400 |
---|---|---|
committer | Behdad Esfahbod <behdad@behdad.org> | 2008-05-27 05:11:00 -0400 |
commit | 626edfc333b77604b6955c12ae111d14c174034c (patch) | |
tree | 33e029338be82c7bad56261acfda3870e85986b7 /src/cairo-mutex-private.h | |
parent | 07fef4f4802639a2cb16284841635d1bcc9b8e8f (diff) |
[cairo-mutex] Prepare mutex infrastructure for adding mutex debugging facilities
Essentially renaming cairo-mutex-type-private.h to cairo-mutex-impl-private.h
and changing all its namespace from cairo_mutex to cairo_mutex_impl.
cairo-mutex-type-private.h then does all the sanity checks on the
implementation that used to be in cairo-mutex-private.h. Plus, defines macros
for the cairo-mutex namespace to map to the cairo-mutex-impl namespace. This
extra mapping layer allows for add debugging facilities.
Diffstat (limited to 'src/cairo-mutex-private.h')
-rw-r--r-- | src/cairo-mutex-private.h | 129 |
1 files changed, 10 insertions, 119 deletions
diff --git a/src/cairo-mutex-private.h b/src/cairo-mutex-private.h index 64afd648..61b87d7a 100644 --- a/src/cairo-mutex-private.h +++ b/src/cairo-mutex-private.h @@ -41,136 +41,27 @@ #ifndef CAIRO_MUTEX_PRIVATE_H #define CAIRO_MUTEX_PRIVATE_H -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include <cairo-features.h> - -#include "cairo-compiler-private.h" #include "cairo-mutex-type-private.h" -/* Only the following three are mandatory at this point */ -#ifndef CAIRO_MUTEX_LOCK -# error "CAIRO_MUTEX_LOCK not defined. Check cairo-mutex-type-private.h." -#endif -#ifndef CAIRO_MUTEX_UNLOCK -# error "CAIRO_MUTEX_UNLOCK not defined. Check cairo-mutex-type-private.h." -#endif -#ifndef CAIRO_MUTEX_NIL_INITIALIZER -# error "CAIRO_MUTEX_NIL_INITIALIZER not defined. Check cairo-mutex-type-private.h." -#endif - CAIRO_BEGIN_DECLS - -#define CAIRO_MUTEX_DECLARE(mutex) extern cairo_mutex_t mutex -#include "cairo-mutex-list-private.h" -#undef CAIRO_MUTEX_DECLARE - - -/* make sure implementations don't fool us: we decide these ourself */ -#undef _CAIRO_MUTEX_USE_STATIC_INITIALIZER -#undef _CAIRO_MUTEX_USE_STATIC_FINALIZER - - -#ifdef CAIRO_MUTEX_INIT - -/* If %CAIRO_MUTEX_INIT is defined, we may need to initialize all - * static mutex'es. */ -# ifndef CAIRO_MUTEX_INITIALIZE -# define CAIRO_MUTEX_INITIALIZE() do { \ - if (!_cairo_mutex_initialized) \ - _cairo_mutex_initialize (); \ - } while(0) - - cairo_private void _cairo_mutex_initialize (void); - - /* and make sure we implement the above */ -# define _CAIRO_MUTEX_USE_STATIC_INITIALIZER 1 -# endif /* CAIRO_MUTEX_INITIALIZE */ - -#else /* no CAIRO_MUTEX_INIT */ - -/* Otherwise we probably don't need to initialize static mutex'es, */ -# ifndef CAIRO_MUTEX_INITIALIZE -# define CAIRO_MUTEX_INITIALIZE() CAIRO_MUTEX_NOOP -# endif /* CAIRO_MUTEX_INITIALIZE */ - -/* and dynamic ones can be initialized using the static initializer. */ -# define CAIRO_MUTEX_INIT(mutex) do { \ - cairo_mutex_t _tmp_mutex = CAIRO_MUTEX_NIL_INITIALIZER; \ - memcpy (&(mutex), &_tmp_mutex, sizeof (_tmp_mutex)); \ - } while (0) - -#endif /* CAIRO_MUTEX_INIT */ - - -#ifdef CAIRO_MUTEX_FINI - -/* If %CAIRO_MUTEX_FINI is defined, we may need to finalize all - * static mutex'es. */ -# ifndef CAIRO_MUTEX_FINALIZE -# define CAIRO_MUTEX_FINALIZE() do { \ - if (_cairo_mutex_initialized) \ - _cairo_mutex_finalize (); \ - } while(0) - - cairo_private void _cairo_mutex_finalize (void); - - /* and make sure we implement the above */ -# define _CAIRO_MUTEX_USE_STATIC_FINALIZER 1 -# endif /* CAIRO_MUTEX_FINALIZE */ - -#else /* no CAIRO_MUTEX_FINI */ - -/* Otherwise we probably don't need to finalize static mutex'es, */ -# ifndef CAIRO_MUTEX_FINALIZE -# define CAIRO_MUTEX_FINALIZE() CAIRO_MUTEX_NOOP -# endif /* CAIRO_MUTEX_FINALIZE */ - -/* neither do the dynamic ones. */ -# define CAIRO_MUTEX_FINI(mutex) CAIRO_MUTEX_NOOP1(mutex) - -#endif /* CAIRO_MUTEX_FINI */ - - -#ifndef _CAIRO_MUTEX_USE_STATIC_INITIALIZER -#define _CAIRO_MUTEX_USE_STATIC_INITIALIZER 0 +#if _CAIRO_MUTEX_IMPL_USE_STATIC_INITIALIZER +cairo_private void _cairo_mutex_initialize (void); #endif -#ifndef _CAIRO_MUTEX_USE_STATIC_FINALIZER -#define _CAIRO_MUTEX_USE_STATIC_FINALIZER 0 +#if _CAIRO_MUTEX_IMPL_USE_STATIC_FINALIZER +cairo_private void _cairo_mutex_finalize (void); #endif - /* only if using static initializer and/or finalizer define the boolean */ -#if _CAIRO_MUTEX_USE_STATIC_INITIALIZER || _CAIRO_MUTEX_USE_STATIC_FINALIZER +#if _CAIRO_MUTEX_IMPL_USE_STATIC_INITIALIZER || _CAIRO_MUTEX_IMPL_USE_STATIC_FINALIZER cairo_private extern cairo_bool_t _cairo_mutex_initialized; #endif +/* Finally, extern the static mutexes and undef */ -CAIRO_END_DECLS +#define CAIRO_MUTEX_DECLARE(mutex) cairo_private extern cairo_mutex_t mutex +#include "cairo-mutex-list-private.h" +#undef CAIRO_MUTEX_DECLARE -/* Make sure everything we want is defined */ -#ifndef CAIRO_MUTEX_INITIALIZE -# error "CAIRO_MUTEX_INITIALIZE not defined" -#endif -#ifndef CAIRO_MUTEX_FINALIZE -# error "CAIRO_MUTEX_FINALIZE not defined" -#endif -#ifndef CAIRO_MUTEX_LOCK -# error "CAIRO_MUTEX_LOCK not defined" -#endif -#ifndef CAIRO_MUTEX_UNLOCK -# error "CAIRO_MUTEX_UNLOCK not defined" -#endif -#ifndef CAIRO_MUTEX_INIT -# error "CAIRO_MUTEX_INIT not defined" -#endif -#ifndef CAIRO_MUTEX_FINI -# error "CAIRO_MUTEX_FINI not defined" -#endif -#ifndef CAIRO_MUTEX_NIL_INITIALIZER -# error "CAIRO_MUTEX_NIL_INITIALIZER not defined" -#endif +CAIRO_END_DECLS #endif |