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

Re: libldap and _r-functions



At 05:47 AM 5/25/2005, Ralf Haferkamp wrote:
>are there specific reasons that the _r-functions (gethostbyname_r, 
>gethostbyaddr_r, ...) are only used for libldap_r and not libldap?

Yes, there are a number of reasons.

libldap was never designed for use in programs which
aren't built/linked for use with a threaded program.  Thread
programs may have problems even where that program serializes
all calls to the library (because of conflicts between the
program's and library's use of system (and dependent library)
calls.  libldap_r was designed for use in threaded programs,
such as slurpd(8).  While libldap_r does have a number of
limitations, it is safe when used properly.

The reason we have two libraries is that, on many systems,
threaded and non-threaded programs are required to
be compiled/linked differently, and that many of the _r
functions are only available to programs compiled/linked
as threaded programs.

>I have a problem here where nss_ldap (configured to be used for 
>resolving hostnames) deadlocks in a gethostbyname() call in libldap. 
>Building libldap so that it uses gethostbyname_r() fixed that problem 
>for me.

Seems like nss_ldap should have been compiled/linked with
libldap_r.

Kurt