[cairo] New per-scaled_font mutex to fix locking bugs

Peter Weilbacher (Mozilla) mozilla at weilbacher.org
Tue Feb 6 17:11:05 PST 2007


On Mon, 05 Feb 2007 17:00:25 -0800, Carl Worth wrote:

>For win32, I took a guess and came up with the following
>
>	typedef CRITICAL_SECTION cairo_mutex_t;
>	# define CAIRO_MUTEX_INIT(mutex) InitializeCriticalSection (mutex)
>	# define CAIRO_MUTEX_FINI(mutex) DeleteCriticalSection (mutex)
>	# define CAIRO_MUTEX_NIL_INITIALIZER {}
>
>The only thing I'm unsure of there is the NIL_INITIALIZER. This is
>only used when initializing the mutex for a nil surface, so the value
>won't ever be looked at, but it does need to compile at least.
>
>And for BeOS and OS/2 I just plain broke the compilation since I had
>no idea what the correct stuff is there. Patches welcome.

Thanks for the hint. For OS/2 I used these lines to get it to compile:

   typedef HMTX cairo_mutex_t;
   # define CAIRO_MUTEX_INIT(mutex) DosCreateMutexSem (NULL, mutex, 0L, TRUE)
   # define CAIRO_MUTEX_FINI(mutex) DosCloseMutexSem (*(mutex))
   # define CAIRO_MUTEX_NIL_INITIALIZER { 0 }

The empty brackets in the NIL_INITIALIZER caused a compile error with the
GCC we use on OS/2. I still get this warning

   cairo-scaled-font.c:90: warning: braces around scalar initializer
   cairo-scaled-font.c:90: warning: (near initialization for `_cairo_scaled_font_nil.mutex')

Not sure if I should care... I ran a test with fonts, checked that it
called the two functions involved and that it still worked without
problems, so I guess this is OK.

   Peter.



More information about the cairo mailing list