EXA/mixed: Update sys_pitch in MPH even when there's no system memory copy.

Otherwise sys_pitch will be stale when a system memory copy is allocated.

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=38322 and a crash when
unlocking the screen with xscreensaver, reported by Janne Huttunen.

Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Tested-by: Janne Huttunen <jahuttun@gmail.com>
Tested-by: Jan Kriho <Erbureth@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 4020cab88f)
This commit is contained in:
Michel Dänzer 2011-08-10 11:36:16 +02:00 committed by Jeremy Huddleston
parent 179ab444fd
commit 8dea7ac25a
1 changed files with 13 additions and 10 deletions

View File

@ -186,17 +186,20 @@ exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
}
/* Need to re-create system copy if there's also a GPU copy */
if (has_gpu_copy && pExaPixmap->sys_ptr) {
free(pExaPixmap->sys_ptr);
pExaPixmap->sys_ptr = NULL;
pExaPixmap->sys_pitch = PixmapBytePad(width, depth);
DamageUnregister(&pPixmap->drawable, pExaPixmap->pDamage);
DamageDestroy(pExaPixmap->pDamage);
pExaPixmap->pDamage = NULL;
RegionEmpty(&pExaPixmap->validSys);
if (has_gpu_copy) {
if (pExaPixmap->sys_ptr) {
free(pExaPixmap->sys_ptr);
pExaPixmap->sys_ptr = NULL;
DamageUnregister(&pPixmap->drawable, pExaPixmap->pDamage);
DamageDestroy(pExaPixmap->pDamage);
pExaPixmap->pDamage = NULL;
RegionEmpty(&pExaPixmap->validSys);
if (pExaScr->deferred_mixed_pixmap == pPixmap)
pExaScr->deferred_mixed_pixmap = NULL;
if (pExaScr->deferred_mixed_pixmap == pPixmap)
pExaScr->deferred_mixed_pixmap = NULL;
}
pExaPixmap->sys_pitch = PixmapBytePad(width, depth);
}
}