glapi: Fix a race in accessing context/dispatch TSD.
authorChia-I Wu <olvaffe@gmail.com>
Fri, 10 Jul 2009 09:35:11 +0000 (17:35 +0800)
committerBrian Paul <brianp@vmware.com>
Mon, 24 Aug 2009 17:45:57 +0000 (11:45 -0600)
If multiple threads set/get a TSD at roughly same time for the first
time, glthread might (wrongly) initialize it more than once.  This patch
solves the race by initializing context/dispatch TSDs early.

Acked-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
src/mesa/glapi/glapi.c

index 30aec209e7dc7301394c2b72a72a581714d95a0f..b9ab9c07be1ea8d571ff59b8c84b20eaf55fe63b 100644 (file)
@@ -240,6 +240,10 @@ _glapi_check_multithread(void)
 
    _glthread_LOCK_MUTEX(ThreadCheckMutex);
    if (firstCall) {
+      /* initialize TSDs */
+      (void) _glthread_GetTSD(&ContextTSD);
+      (void) _glthread_GetTSD(&_gl_DispatchTSD);
+
       knownID = _glthread_GetID();
       firstCall = GL_FALSE;
    }