EXA bug: Calling FinishAccess on pixmap 0xaf06d008 with index 1 while it should have been (nil).

Michel Dänzer michel at daenzer.net
Sat Jul 18 08:12:27 PDT 2009

On Sat, 2009-07-18 at 15:25 +0200, Maarten Maathuis wrote: 
> I'm trying to get my system in order again, but i'll certainly have a
> look once i go trough the tons of updates and everything else that
> needs doing.
> So someone is using scratch GC and not finishing or preparing access
> properly?

No, the problem is precisely that the scratch GC usage involves
Prepare/FinishAccess, with the same indices already used by
ExaCheckComposite() (which can potentially use all available indices).

Another possible solution might be to unwrap pScreen->CreateGC before
calling the lower level ps->Composite(), see below.

diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c
index 0d53b67..d7ec2f0 100644
--- a/exa/exa_unaccel.c
+++ b/exa/exa_unaccel.c
@@ -432,6 +432,7 @@ ExaCheckComposite (CARD8      op,
 	exaPrepareAccess (pSrc->pDrawable, EXA_PREPARE_SRC);
     if (pMask && pMask->pDrawable != NULL)
 	exaPrepareAccess (pMask->pDrawable, EXA_PREPARE_MASK);
+    swap(pExaScr, pScreen, CreateGC);
 #ifdef RENDER
     swap(pExaScr, ps, Composite);
     ps->Composite (op,
@@ -448,6 +449,7 @@ ExaCheckComposite (CARD8      op,
     swap(pExaScr, ps, Composite);
 #endif /* RENDER */
+    swap(pExaScr, pScreen, CreateGC);
     if (pMask && pMask->pDrawable != NULL)
 	exaFinishAccess (pMask->pDrawable, EXA_PREPARE_MASK);
     if (pSrc->pDrawable != NULL)

Earthling Michel Dänzer           |                http://www.vmware.com
Libre software enthusiast         |          Debian, X and DRI developer

More information about the xorg mailing list