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

RE: (ITS#4662) ldap_create needs lock?

What about registering an initialization entry point when the library is
loaded? Though that only solves the problem when the .so/.dll is used;
not when someone links directly with the object module.

Though I do find it difficult to believe static initialization isn't

Windows has it.

Linux and Solaris have it (see

Sure, you'd need a #define or something similar that works on all
platforms, but that shouldn't be that difficult? I've done so for
Windows, Solaris, and Linux.

- Bernie 

-----Original Message-----
From: Howard Chu [mailto:hyc@symas.com] 
Sent: Monday, September 11, 2006 9:35 PM
To: Bernie Volz (volz)
Cc: openldap-its@OpenLDAP.org
Subject: Re: (ITS#4662) ldap_create needs lock?

volz@cisco.com wrote:
> Full_Name: Bernie Volz
> Version: All
> OS: Linux
> URL: ftp://ftp.openldap.org/incoming/
> Submission from: (NULL) (
> In ldap_create, if multiple threads are calling ldap_init (or one of
the other
> initialization functions), they may compete to initialize the global
options and
> this results in a segmentation fault.

> Shouldn't the above code be conditionalized on LDAP_R_COMPILE and use
a static
> global mutex to assure that only one thread is testing and potentially
> initializing the global options.

Unfortunately static mutex initializers are non-portable. I guess for 
gcc we could arrange to have a constructor do the initialization, but 
it's not clear what we can do for the more general case.

   -- Howard Chu
   Chief Architect, Symas Corp.  http://www.symas.com
   Director, Highland Sun        http://highlandsun.com/hyc
   OpenLDAP Core Team            http://www.openldap.org/project/