[Proj] libproj4 thread safety
gerald.evenden at verizon.net
Sun Apr 24 13:34:17 EDT 2005
A couple of solutions have been offered to solve the problem of make
either a thread safe or unsafe library but all of them force a
of the entire library.
As libproj4 now sits on my machine the *only* module affected with
pthread references is pj_errno.c. *All* other procedures do not have
any <phread.h> or other reference to threads including lib_proj.h.
What would be a clean, but somewhat complicated, solution at compile
time would be two supplementary libraries libpj_errno.a and
so that two compile/link lines are possible and solve all cases:
gcc myprog -lproj4 -lpj_errno #for non threads
gcc myprog -lproj4 -lpj_errno_p -lpthread # for threads
For some reason, a single module library seems a bit -- er --
Of course, pj_errno.o is not is the above libproj4.a.
In the case of the system's errno I suspect that a thread version of the
equivalent of pj_errno.o is in libpthread.a which is loaded prior to the
linker seeing the version in libc.a. Just a guess. What would happen
if I did -lc -lpthread?
The only changes I made in libproj4 was to pj_errno.c and dropped the
reference to the global 'extern int pj_errno' in lib_proj.h and added
two lines referring to *pj_errno_loc() and defining pj_errno.
The bottom line is that I would strongly prefer *not* to make any
compile statements in lib_proj.h and keep this whole process identical
C library custom of handling errno.
Jerry and the low riders: Daisy Mae and Joshua.
"The whole religious complexion of the modern world is due to the
absence from Jerusalem of a lunatic asylum." Havelock Ellis, 1914
More information about the Proj