This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 2/2] Initialize tunable list with the GLIBC_TUNABLES environment variable


On 01/11/2016 09:45 AM, Siddhesh Poyarekar wrote:
> On Mon, Jan 11, 2016 at 02:51:36PM +0100, Andreas Schwab wrote:
>> Siddhesh Poyarekar <sid@reserved-bit.com> writes:
>>
>>>  void
>>>  __tunables_init (char **envp)
>>>  {
>>> -  /* Empty for now.  */
>>> +  static bool initialized = false;
>>> +
>>> +  if (__glibc_likely (initialized))
>>> +    return;
>>
>> Is this supposed to be thread-safe?
> 
> This is called only from the libc.so and libpthread.so constructors.
> So the first run will always happen exclusively in the main thread
> through either library constructor.

Not true if you link statically and dlopen, at which point you could
have multiple threads, and you call dlopen which loads 
libc.so/libpthread.so's constructors?

You can write a simple static test case that creates N threads and
calls dlopen on some DSO to test this.

> Even in case the constructors do get called in parallel in different
> threads, they should get synchronized by the dynamic linker load lock,
> so you'd never have concurrent calls to __tunables_init that race on
> the value of initialized.

Please include a concurrency note there then, that this is protected
by the load lock?

Cheers,
Carlos.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]