On Thu, Jul 2, 2015 at 6:23 PM, Erik Faye-Lund <kusmab...@gmail.com> wrote:
> On Thu, Jul 2, 2015 at 2:56 PM, Ilia Mirkin <imir...@alum.mit.edu> wrote:
>> On Thu, Jul 2, 2015 at 5:54 PM, Matt Turner <matts...@gmail.com> wrote:
>>> On Thu, Jul 2, 2015 at 2:22 PM, Ilia Mirkin <imir...@alum.mit.edu> wrote:
>>>> Can this be done at dlopen/init time? For example what happens if you do
>>>>
>>>> static int foo = _mesa_locale_init()
>>>>
>>>> IIRC things like that are possible in C++, not sure about C.
>>>
>>> gcc has __attribute__((constructor)).
>>>
>>> But I don't think we really care... Erik's series converted the strtod
>>> code from C++ to C (including moving locale init from being a static
>>> constructor to being called in one_time_init) and fixing the memory
>>> leak.
>>
>> Well, this is just going to happen over and over again, I was hoping
>> there was an easy way to do static initializers in C. If not, then I
>> guess we're stuck with this.
>
> The good news is that the breakage was noticed real quick. I agree
> that it'd be awesome to have this happen automatically, but AFAIK
> there's no perfect solution for this:
>
> * C++ static object initializer leads to libc++ dependencies.
> * __attribute__((constructor)) is compiler specific.
> * Naively mutex-protecting initialization leads to overhead in the common 
> case.
> * Lighter-weight double checked locks are tricky to implement, and
>   also have some overhead
> * pthread_once() is not available on Windows, and have some overhead

Sounds good. Just wanted to make sure some alternatives were
considered before peppering main functions with _mesa_locale_init.

Cheers,

  -ilia
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to