[Date Prev][Date Next] [Chronological] [Thread] [Top]

RE: slapd crash



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