summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFredrik Höglund <fredrik@kde.org>2007-08-18 19:02:18 +0200
committerFredrik Höglund <fredrik@kde.org>2007-08-18 19:02:18 +0200
commit3c448b0eb67337b56641e09a6d168aad6745e3ef (patch)
treefa50670cf0457321fd0adfaf1fe5622beaf5bfcd
parent23fbd5292d356067e85e1eec4eb4f743532b0503 (diff)
EXA: Fix a couple of logic errors in exaGetPixmapFirstPixel.
The fb pointer would be left uninitialized when exaPixmapIsOffscreen returned false. When it returned true and the pixmap was damaged, fb would be initialized from the pixmap's devPrivate.ptr before the exaDoMigration and exaPrepareAccess calls, at which point devPrivate.ptr would still be pointing at offscreen memory.
-rw-r--r--exa/exa_unaccel.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c
index b67ea6389..a94648b47 100644
--- a/exa/exa_unaccel.c
+++ b/exa/exa_unaccel.c
@@ -382,19 +382,19 @@ exaGetPixmapFirstPixel (PixmapPtr pPixmap)
ExaMigrationRec pixmaps[1];
ExaPixmapPriv (pPixmap);
+ fb = pExaPixmap->sys_ptr;
+
/* Try to avoid framebuffer readbacks */
- if (exaPixmapIsOffscreen(pPixmap)) {
- if (!miPointInRegion(DamageRegion(pExaPixmap->pDamage), 0, 0, &box)) {
- fb = pExaPixmap->sys_ptr;
- } else {
- need_finish = TRUE;
- fb = pPixmap->devPrivate.ptr;
- pixmaps[0].as_dst = FALSE;
- pixmaps[0].as_src = TRUE;
- pixmaps[0].pPix = pPixmap;
- exaDoMigration (pixmaps, 1, FALSE);
- exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
- }
+ if (exaPixmapIsOffscreen(pPixmap) &&
+ miPointInRegion(DamageRegion(pExaPixmap->pDamage), 0, 0, &box))
+ {
+ need_finish = TRUE;
+ pixmaps[0].as_dst = FALSE;
+ pixmaps[0].as_src = TRUE;
+ pixmaps[0].pPix = pPixmap;
+ exaDoMigration (pixmaps, 1, FALSE);
+ exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
+ fb = pPixmap->devPrivate.ptr;
}
switch (pPixmap->drawable.bitsPerPixel) {