[Proj] threadsafety and PROJ.4 - the projCtx API Update
Frank Warmerdam
warmerdam at pobox.com
Thu Jun 10 21:00:16 EST 2010
Folks,
For a project I'm involved in (a spatial capability for Ingres), it is
desirable to make PROJ.4 threadsafe. In the past some work has been
done to protect some parts of PROJ.4 with mutexes (ie. grid loading
code). However, at least one major hole remained in the thread safety
of the library, and that was the use of "pj_errno" as a global error
variable. It is not only used to report to the application, but also
for various internal checks.
I have struggled for a while with how to address this, and I have decided
to implement a sort of thread context structure in PROJ.4 called projCtx.
It includes a "last error" variable which is intended to replace use of
pj_errno within the library and for applications that wish to support
multi-threading.
I have written up a page on this, and just committed preliminary
implementation of this structure.
http://trac.osgeo.org/proj/wiki/ThreadSafety
http://trac.osgeo.org/proj/changeset/1854
The short story is that applications which don't care about thread safety
can continue to call the API as they do now. Those that do care, can create
a projCtx with pj_ctx_alloc(), and then call pj_init_ctx() or
pj_init_plus_ctx() with that context. These functions push a pointer to
the context into the projPJ structure so it is not necessary to be aware
of the context in other parts of the high level API.
I must confess I've just gone ahead and done this without seeking
permission, but if there are strong reasons not to use this approach
I'd consider backing it out in favor of another solution. So I'm seeking
feedback on the approach and if anyone sees other problems.
Best regards,
--
---------------------------------------+--------------------------------------
I set the clouds in motion - turn up | Frank Warmerdam, warmerdam at pobox.com
light and sound - activate the windows | http://pobox.com/~warmerdam
and watch the world go round - Rush | Geospatial Programmer for Rent
More information about the Proj
mailing list