xserver: Branch 'master'
Keith Packard
keithp at kemper.freedesktop.org
Fri Jun 11 09:24:58 PDT 2010
exa/exa_classic.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
New commits:
commit 7e8f1001217326cc451974bacf25275420c4bb4e
Author: Ãric Piel <E.A.B.Piel at tudelft.nl>
Date: Fri Jun 11 09:16:32 2010 -0700
exa: fix ExaCheckCopyNtoN for exa_classic when source = dest
In case you want to copy a region with source = dest, you have the same pixmap
as source and dest.
At the end of exaPixmapIsOffscreen_classic() the devPrivate.ptr is reset to
NULL (look at the sources).
Now this is what happens in ExaCheckCopyNtoN:
exaPrepareAccess( pDst );
Calls IsOffscreen()
sets devPrivate.ptr to NULL
sets up devPrivate.ptr to real pointer
Everything OK
exaPrepareAccess( pSrc );
Calls IsOffscreen()
sets devPrivate.ptr to NULL
BAILS OUT CAUSE OF NESTED OPERATION SINCE DST EQUALS SRC
We end up with devPrivate.ptr as NULL, and that is clearly wrong.
In particular this fixes a segfault when using the psb driver (bug 28077)
Signed-off-by: Ãric Piel <eric.piel at tremplin-utc.net>
Reviewed-by: Michel Dänzer <michel at daenzer.net>
Signed-off-by: Keith Packard <keithp at keithp.com>
diff --git a/exa/exa_classic.c b/exa/exa_classic.c
index 0b0ca4e..2cfeda5 100644
--- a/exa/exa_classic.c
+++ b/exa/exa_classic.c
@@ -257,9 +257,10 @@ exaPixmapHasGpuCopy_classic(PixmapPtr pPixmap)
Bool ret;
if (pExaScr->info->PixmapIsOffscreen) {
+ void* old_ptr = pPixmap->devPrivate.ptr;
pPixmap->devPrivate.ptr = ExaGetPixmapAddress(pPixmap);
ret = pExaScr->info->PixmapIsOffscreen(pPixmap);
- pPixmap->devPrivate.ptr = NULL;
+ pPixmap->devPrivate.ptr = old_ptr;
} else
ret = (pExaPixmap->use_gpu_copy && pExaPixmap->fb_ptr);
More information about the xorg-commit
mailing list