On 05/03/11 15:56, Bradley Grainger wrote:
> The current code is incorrect because InitializeCriticalSection must be 
> called on a CRITICAL_SECTION for Windows to consider it valid; it's not 
> sufficient to just zero out the fields of the structure.
> 
> There's no built-in analogue to G_STATIC_MUTEX_INIT on Windows, but now that 
> I've looked through the glib code a little, I see that it could be written in 
> the same way glib does it (i.e., initialise static mutexes on demand the 
> first time they're used by taking a different global mutex that protects 
> static mutex initialisation).
> 
> If static mutexes could be avoided, it could make cross-platform portability 
> easier. (And there might be a minor performance gain from not having to enter 
> a global mutex in order to initialise static mutexes.) 

Ah, you're right.  I was copying from cairo and forgot that we initialize
static mutexes there.

Now, you may notice that as it stands, right now we don't use any static
mutex.  So, I can just go ahead an initialize them all.  But I was planning on
using static mutexes to make static data initialization (like hb_language
stuff) threadsafe.

I think I need to study the glib code.  It's not clear to me how to initialize
the global mutex initialization mutex safely :).

I'll get back to you.


behdad
_______________________________________________
HarfBuzz mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/harfbuzz

Reply via email to