[cairo] [cairo-commit] 2 commits - src/cairo-os2.h src/cairo-os2-surface.c
mozilla at Weilbacher.org
Fri Feb 8 03:53:57 PST 2008
On Fri, 8 Feb 2008, Behdad Esfahbod wrote:
>> On 07.02.08 00:25, Behdad Esfahbod wrote:
>>> Mutex initialization should happen automatically. If you need this for
>>> FcInit(), we can make that automatic too.
> By calling CAIRO_MUTEX_INITIALIZE() in strategic places, making sure all
> static mutexes are initialized before being used.
I notice that some of the other platform surfaces call that in their
_create() function(s). Is that what you mean by "strategic"? But then
where should I put the respective FINALIZE? I don't see that e.g. in
cairo_surface_destroy(). And what about _create()s of the other surface
And if that was so easy, why then does the Windows code have to set up
these things in the DLL init routine, too? (And what does Windows do for
statically linked programs?) Also weird that no other platform calls
FINALIZE at all.
> For FcInit(), it would be a matter of doing similarly in a couple places
> in cairo-ft-font.c. Why do you call FcInit() btw? I've never seen
> anyone calling it. Cairo doesn't, pango doesn't, GTK+ doesn't. Why do
> you think it's necessary on OS/2?
I was wondering myself yesterday, why none of the tests that use FC
stuff call FcInit() even though the FC documentation says that before
using any of those you have to call that or one of the other FcInit*()
functions. I can only guess that some kind of FcInit() is done in
somewhere in X and so on Unixes you don't need to call it again.
In any case, on OS/2 we do need it, otherwise we won't have any fonts in
the font list that FC manages.
But even if we move away those to somewhere else, where should we put
the DisableFPUException call? I know that on my machine it's not an
issue (probably that's why most of the testsuite runs) but lots of users
will crash immediately if that isn't there. The comment says this would
only happen for OS/2 PM APIs but I know that we had similar problems in
the Mozilla JS library. So I think it's not just relevant for OS/2
surfaces but probably also the other surface types.
More information about the cairo