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

RE: (ITS#4662) ldap_create needs lock?



ldap_get_option(3) can be used to initialize the library
before spawning threads.

At 06:54 PM 9/11/2006, volz@cisco.com wrote:
>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
>possible?
>
>Windows has it.
>
>Linux and Solaris have it (see
>http://www.die.net/doc/linux/man/man3/pthread_mutex_init.3.html).
>
>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) (64.102.254.33)
>> 
>> 
>> 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/