Cairo exports and more (was Re: [cairo] Re: Munging header files
for export (and other) attributes)
Bill Spitzak
spitzak at d2.com
Thu Sep 15 17:46:26 PDT 2005
Doodle wrote:
> To solve the initialization race, I think the only clean solution
> is to introduce new cairo_initialize() and cairo_uninitialize()
> functions
PLEASE NO!!!!!!!
All that is going to happen is people will put their own thread-unsafe
wrappers around these calls. Or they will call them more than once, or
not call them, and thus make code that does not work on multiple
platforms. And if you think that making Cairo return an error in these
cases is a good idea, it isn't, because you have now added exactly the
same amount of overhead code (an if on every function) that the
no-initialize version would need.
This is ALWAYS a bad idea, and is why modern programs take so horridly
long to start up. Please don't do this!!!!
Use a mutex (and use that DLLInit to initialize the mutex) and put it in
the back end functions that need to lock and initialize something:
_cairo_backend_foo() {
static char been_here = false;
if (!been_here) {
lock(backend_internal_mutex);
if (!been_here) {
initialize_stuff();
been_here = true;
}
unlock(backend_internal_mutex);
}
}
More information about the cairo
mailing list