Module: Mesa Branch: master Commit: a96f86831e666dd3942828abd156805c242e44f6 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a96f86831e666dd3942828abd156805c242e44f6
Author: Eric Anholt <[email protected]> Date: Mon Jun 29 11:37:21 2009 -0700 Revert "intel: Remove unneded pthread mutex in LOCK_HARDWARE." This reverts commit de447afff26706e3bf8bdcd5cfb8b1daf49b4b21 but puts the lock under DRI1-only. >From keithw: > It's there because the DRI1 code doesn't actually achieve the mutexing > which it looks as if it should. For multi-threaded applications it was > always possible to get two threads inside locked regions -- I have no > idea how, but it certainly was and presumably still is possible. --- src/mesa/drivers/dri/intel/intel_context.c | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c index 64d28cf..f77e823 100644 --- a/src/mesa/drivers/dri/intel/intel_context.c +++ b/src/mesa/drivers/dri/intel/intel_context.c @@ -1038,6 +1038,8 @@ intelContendedLock(struct intel_context *intel, GLuint flags) } +_glthread_DECLARE_STATIC_MUTEX(lockMutex); + /* Lock the hardware and validate our state. */ void LOCK_HARDWARE( struct intel_context *intel ) @@ -1052,6 +1054,9 @@ void LOCK_HARDWARE( struct intel_context *intel ) if (intel->locked >= 2) return; + if (!sPriv->dri2.enabled) + _glthread_LOCK_MUTEX(lockMutex); + if (intel->driDrawable) { intel_fb = intel->driDrawable->driverPrivate; @@ -1103,8 +1108,10 @@ void UNLOCK_HARDWARE( struct intel_context *intel ) assert(intel->locked == 0); - if (!sPriv->dri2.enabled) + if (!sPriv->dri2.enabled) { DRM_UNLOCK(intel->driFd, intel->driHwLock, intel->hHWContext); + _glthread_UNLOCK_MUTEX(lockMutex); + } if (INTEL_DEBUG & DEBUG_LOCK) _mesa_printf("%s - unlocked\n", __progname); _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
