[Mesa-dev] [PATCH 1/2] c11/threads: add missing brackets around _MTX_INITIALIZER_NP

Jose Fonseca jfonseca at vmware.com
Mon Aug 18 08:09:39 PDT 2014


On 02/08/14 00:26, Ian Romanick wrote:
> On 08/01/2014 09:41 AM, Emil Velikov wrote:
>> ... for win32 builds. Spotted this warning when I've imported the
>> library into waffle, and gave mingw-w64-gcc a bash at compiling it.
>>
>> src/waffle/core/wcore_display.c:37:5: warning: missing braces around
>> initializer [-Wmissing-braces]
>> static mtx_t mutex = _MTX_INITIALIZER_NP;
>> ^
>>
>> Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
>> ---
>>   include/c11/threads_win32.h | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/include/c11/threads_win32.h b/include/c11/threads_win32.h
>> index 5298a84..35880ba 100644
>> --- a/include/c11/threads_win32.h
>> +++ b/include/c11/threads_win32.h
>> @@ -85,7 +85,7 @@ Configuration macro:
>>   #define TSS_DTOR_ITERATIONS 1
>>
>>   // FIXME: temporary non-standard hack to ease transition
>> -#define _MTX_INITIALIZER_NP {(PCRITICAL_SECTION_DEBUG)-1, -1, 0, 0, 0, 0}
>> +#define _MTX_INITIALIZER_NP {{(PCRITICAL_SECTION_DEBUG)-1, -1, 0, 0, 0, 0}}
>
> This is because CRITICAL_SECTION is actually a typedef of a pointer to
> some structure type, so it needs to be initialized like an array of
> strcutres.  Yeah?
>
> I searched a bit on the net, and I could not find a single example of
> initializing a win32 CRITICAL_SECTION this way.  Is this a good idea?

It's unavoidable.

src/gallium/auxiliary/os/os_thread.h used to have a comment with a link 
to this:

   http://locklessinc.com/articles/pthreads_on_windows/

But it got lost with the c11/threads.h introduction.

It' probably worth adding this link once again.

> The FIXME comment doesn't inspire confidence...

That comment is because static initializers are not part of the C 
standard.   This works fine from a Win32 POV.

In other words, we should stop using static initializers, not because 
they cause problems on Windows, but because it's not part of the C11 
standard, hence we'll be in trouble the day we want to use system 
provided C11 headers instead of our own.

include/c11/threads_posix.h has the same:

   // FIXME: temporary non-standard hack to ease transition
   #define _MTX_INITIALIZER_NP PTHREAD_MUTEX_INITIALIZER


Jose


More information about the mesa-dev mailing list