diff options
author | Eric Anholt <eric@anholt.net> | 2009-06-29 09:45:06 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2009-06-29 10:33:50 -0700 |
commit | 3927874d9c7fafb61651d0fc69547c8e010181f5 (patch) | |
tree | 5808681a32ac7ae4bd1aafc61357b152b0ec13e3 /src/mesa/drivers/dri/intel/intel_context.c | |
parent | 7b5373c4345687b3af89f97a4c3998b8ca5debd5 (diff) |
intel: Make LOCK_HARDWARE recursive to avoid hand-rolling recursiveness.
Diffstat (limited to 'src/mesa/drivers/dri/intel/intel_context.c')
-rw-r--r-- | src/mesa/drivers/dri/intel/intel_context.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c index 21d13b862b..00dfb3dc79 100644 --- a/src/mesa/drivers/dri/intel/intel_context.c +++ b/src/mesa/drivers/dri/intel/intel_context.c @@ -994,7 +994,6 @@ intelContendedLock(struct intel_context *intel, GLuint flags) int me = intel->hHWContext; drmGetLock(intel->driFd, intel->hHWContext, flags); - intel->locked = 1; if (INTEL_DEBUG & DEBUG_LOCK) _mesa_printf("%s - got contended lock\n", __progname); @@ -1051,9 +1050,11 @@ void LOCK_HARDWARE( struct intel_context *intel ) struct intel_framebuffer *intel_fb = NULL; struct intel_renderbuffer *intel_rb = NULL; + intel->locked++; + if (intel->locked >= 2) + return; + _glthread_LOCK_MUTEX(lockMutex); - assert(!intel->locked); - intel->locked = 1; if (intel->driDrawable) { intel_fb = intel->driDrawable->driverPrivate; @@ -1101,7 +1102,11 @@ void UNLOCK_HARDWARE( struct intel_context *intel ) __DRIscreen *sPriv = intel->driScreen; intel->vtbl.note_unlock( intel ); - intel->locked = 0; + intel->locked--; + if (intel->locked > 0) + return; + + assert(intel->locked == 0); if (!sPriv->dri2.enabled) DRM_UNLOCK(intel->driFd, intel->driHwLock, intel->hHWContext); |