egl: Create queryable strings in eglInitialize().
authorMatt Turner <mattst88@gmail.com>
Tue, 10 Mar 2015 18:41:57 +0000 (11:41 -0700)
committerMatt Turner <mattst88@gmail.com>
Fri, 13 Mar 2015 17:42:38 +0000 (10:42 -0700)
commitdac2e7deaae2540645a6b485c7d1f47195689116
tree4168a4bdc7f1dacc9459af876bcd43ce23310bb8
parentb43bbfa90ace596c8b2e0b3954a5f69924726c59
egl: Create queryable strings in eglInitialize().

Creating/recreating the strings in eglQueryString() is extra work and
isn't thread-safe, as exhibited by shader-db's run.c using libepoxy.

Multiple threads in run.c call eglReleaseThread() around the same time.
libepoxy calls eglQueryString() to determine whether eglReleaseThread()
exists, and our EGL implementation passes a pointer to the version
string to libepoxy while simultaneously overwriting the string, leading
to a failure in libepoxy.

Moreover, the EGL spec says (emphasis mine):

"eglQueryString returns a pointer to a *static*, zero-terminated string"

This patch moves some auxiliary functions from eglmisc.c to eglapi.c so
that they may be used to create the extension, API, and version strings
once during eglInitialize(). The auxiliary functions are renamed from
_eglUpdate* to _eglCreate*, and some checks made unnecessary by calling
the functions from eglInitialize() are removed.

Reviewed-by: Chad Versace <chad.versace@intel.com>
src/egl/main/eglapi.c
src/egl/main/eglmisc.c