mapi: do not call thread-unsafe dispatch getter

When not using the USE_ELF_TLS code-path, this function is
thread-unsafe, because it returns u_current_table if set without
consulting the ThreadSafe variable in u_current.c.

There's a short period where this can cause problems, if a program uses
multiple threads, but only have made a single context current so far. If
the program issues OpenGL commands from the initialized thread while a
new thread is setting u_current_table to __glapi_noop_table, we will
return the wrong table here.

It doesn't seem right to have two versions of the code that does the
same anyway, so let's use the version that doesn't have this problem
instead.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Louis-Francis Ratté-Boulianne <lfrb@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7280>
This commit is contained in:
Erik Faye-Lund 2020-10-22 18:21:07 +02:00 committed by Marge Bot
parent 65d6f258c5
commit 61d40ae4d0
2 changed files with 1 additions and 12 deletions

View file

@ -67,7 +67,7 @@ entry_current_get(void)
#ifdef MAPI_MODE_BRIDGE
return GET_DISPATCH();
#else
return u_current_get_table();
return u_current_get_table_internal();
#endif
}

View file

@ -62,15 +62,4 @@ u_current_set_context(const void *ptr);
void *
u_current_get_context_internal(void);
static inline const struct _glapi_table *
u_current_get_table(void)
{
#ifdef USE_ELF_TLS
return u_current_table;
#else
return (likely(u_current_table) ?
u_current_table : u_current_get_table_internal());
#endif
}
#endif /* _U_CURRENT_H_ */