Revert "intel: Remove unneded pthread mutex in LOCK_HARDWARE."
authorEric Anholt <eric@anholt.net>
Mon, 29 Jun 2009 18:37:21 +0000 (11:37 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 29 Jun 2009 18:39:09 +0000 (11:39 -0700)
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

index 64d28cfe6a4a0d2306eb3f6d2eff4e4953e705a1..f77e823ca08424001d045abbb43103d24fd62858 100644 (file)
@@ -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);