The Exact Crash that I saw was caused by the errno struct changing
between threaded and non threaded applications.
According to the people working on the mit Kerberos library, The library
is not thread safe, As it uses static variables that are shared across
contexts, and it does file locking which is done on a per process basis, and
they do not make sure that all the C library calls that they make are thread safe.
Compiling the library with the _REENTERANT[1] is not a fix supplied by the MIT Folks
it is one of the changes that will need to be made as the library becomes thread safe
on the Solaris platform. (The Define controlls the contents of certan header files)
I am positive that this does not fix all the threading issues it just fixes the "Obvious" one.
This is more a documentation issue then anything else and If you want I can contribute
back what I learn on my search for a thread safe version of a kerberos library :-)
Thanks
Glenn
[1] The exact spelling of this flag is questionable when I am away from my notes.
---- original message ------
>> -----Original Message-----
> From: Kervin L. Pierre [mailto:kervin@blueprint-tech.com]
> Howard, I'll have to respectively disagree,
No problem...
>
> I think that if OpenLDAP can not run using non-thread safe libraries
> then an effort should be made to notify the user of this at *compile*
> time. Any *runtime* crashes will be seen by the user as OpenLDAP
> instability, so I think great care should be taken to notify users
who
> build from source of known build issues.
>
> IMHO, this is an OpenLDAP build config issue, or at least an OpenLDAP
> documentation issue.
Perhaps so. People are always welcome to contribute to the
documentation
as well as the code. You need to realize that this is a problem
peculiar
to Solaris, and maybe some number of other as-yet-undiscovered systems.
autoconf was made to attempt to address these kinds of system
dependencies,
but we can't account for everything. In particular, we can't always
account
for the way that some other dependent library was built. If you know of
a
simple way to test these features, certainly we can add tests. The fact
that
the MIT Kerberos library itself is non-reentrant, whether you build it
correctly or not, is something we have no control over, so I'd lean
toward
documenting it instead of patching around it.
And it's not an issue of OpenLDAP being unable to run using non-thread
safe libraries. If you run configure "--without-threads" then you'll
get
a running OpenLDAP that doesn't use threads. No problem. The problem is
in mixing the two, and *this* particular problem only occurs on
platforms
whose standard C headers change their definition of "errno" depending
on
what compiler flags you use. That in itself is a kludge and it is
difficult
to code around it. Of course, most threaded C libraries need to do
this,
but e.g. Linux doesn't crash when you try to refer to errno from the
wrong
context. The fact that this mismatch causes a program to crash is a
flaw in
the system's C library, IMHO.
> I think that was really good work by Glenn to track this down.
-- Howard Chu
Chief Architect, Symas Corp. Director, Highland Sun
http://www.symas.com http://highlandsun.com/hyc
Symas: Premier OpenSource Development and Support