-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Chia-I Wu wrote: > Multiple threads might call _glapi_check_multithread at roughly the same > time. It is possbile that all of them are wrongly regarded as firstCall > if there is no mutex. This bug causes xeglthreads to crash sometimes.
Acked-by: Ian Romanick <[email protected]> > --- > src/mesa/glapi/glapi.c | 29 +++++++++++++++-------------- > 1 files changed, 15 insertions(+), 14 deletions(-) > > diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c > index 2b105d0..30aec20 100644 > --- a/src/mesa/glapi/glapi.c > +++ b/src/mesa/glapi/glapi.c > @@ -198,6 +198,7 @@ PUBLIC const void *_glapi_Context = NULL; > > #if defined(THREADS) > > +_glthread_DECLARE_STATIC_MUTEX(ThreadCheckMutex); > static GLboolean ThreadSafe = GL_FALSE; /**< In thread-safe mode? */ > _glthread_TSD _gl_DispatchTSD; /**< Per-thread dispatch pointer */ > static _glthread_TSD ContextTSD; /**< Per-thread context pointer */ > @@ -231,23 +232,23 @@ void > _glapi_check_multithread(void) > { > #if defined(THREADS) && !defined(GLX_USE_TLS) > - if (!ThreadSafe) { > - static unsigned long knownID; > - static GLboolean firstCall = GL_TRUE; > - if (firstCall) { > - knownID = _glthread_GetID(); > - firstCall = GL_FALSE; > - } > - else if (knownID != _glthread_GetID()) { > - ThreadSafe = GL_TRUE; > - _glapi_set_dispatch(NULL); > - _glapi_set_context(NULL); > - } > + static unsigned long knownID; > + static GLboolean firstCall = GL_TRUE; > + > + if (ThreadSafe) > + return; > + > + _glthread_LOCK_MUTEX(ThreadCheckMutex); > + if (firstCall) { > + knownID = _glthread_GetID(); > + firstCall = GL_FALSE; > } > - else if (!_glapi_get_dispatch()) { > - /* make sure that this thread's dispatch pointer isn't null */ > + else if (knownID != _glthread_GetID()) { > + ThreadSafe = GL_TRUE; > _glapi_set_dispatch(NULL); > + _glapi_set_context(NULL); > } > + _glthread_UNLOCK_MUTEX(ThreadCheckMutex); > #endif > } > -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkpXjiEACgkQX1gOwKyEAw9OCQCeK7Vn+l01m3AHShHKQ9HP9ASO q9UAoIKSlU5ZH3W/PPUTNDYHUDy6cxVp =G/ic -----END PGP SIGNATURE----- ------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge _______________________________________________ Mesa3d-dev mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mesa3d-dev
