glsl: protect anonymous struct id with a mutex

There may be two contexts compiling shaders at the same time, and we want the
anonymous struct id to be globally unique.

Signed-off-by: Chia-I Wu <olv@lunarg.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
Chia-I Wu 2014-08-20 14:40:28 +08:00 committed by Kenneth Graunke
parent 61c3d49388
commit a6706163cb

View file

@ -1350,9 +1350,15 @@ ast_struct_specifier::ast_struct_specifier(const char *identifier,
ast_declarator_list *declarator_list)
{
if (identifier == NULL) {
static mtx_t mutex = _MTX_INITIALIZER_NP;
static unsigned anon_count = 1;
identifier = ralloc_asprintf(this, "#anon_struct_%04x", anon_count);
anon_count++;
unsigned count;
mtx_lock(&mutex);
count = anon_count++;
mtx_unlock(&mutex);
identifier = ralloc_asprintf(this, "#anon_struct_%04x", count);
}
name = identifier;
this->declarations.push_degenerate_list_at_head(&declarator_list->link);