summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--randr/rrcrtc.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 9bc456bdc..cbd03d000 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -361,6 +361,20 @@ RRComputeContiguity(ScreenPtr pScreen)
pScrPriv->discontiguous = discontiguous;
}
+static void
+rrDestroySharedPixmap(RRCrtcPtr crtc, PixmapPtr pPixmap) {
+ if (crtc->pScreen->current_master && pPixmap->master_pixmap) {
+ /*
+ * Unref the pixmap twice: once for the original reference, and once
+ * for the reference implicitly added by PixmapShareToSlave.
+ */
+ crtc->pScreen->current_master->DestroyPixmap(pPixmap->master_pixmap);
+ crtc->pScreen->current_master->DestroyPixmap(pPixmap->master_pixmap);
+ }
+
+ crtc->pScreen->DestroyPixmap(pPixmap);
+}
+
void
RRCrtcDetachScanoutPixmap(RRCrtcPtr crtc)
{
@@ -372,14 +386,7 @@ RRCrtcDetachScanoutPixmap(RRCrtcPtr crtc)
pScrPriv->rrCrtcSetScanoutPixmap(crtc, NULL);
if (crtc->scanout_pixmap) {
- master->StopPixmapTracking(mscreenpix, crtc->scanout_pixmap);
- /*
- * Unref the pixmap twice: once for the original reference, and once
- * for the reference implicitly added by PixmapShareToSlave.
- */
- master->DestroyPixmap(crtc->scanout_pixmap->master_pixmap);
- master->DestroyPixmap(crtc->scanout_pixmap->master_pixmap);
- crtc->pScreen->DestroyPixmap(crtc->scanout_pixmap);
+ rrDestroySharedPixmap(crtc, crtc->scanout_pixmap);
}
crtc->scanout_pixmap = NULL;
RRCrtcChanged(crtc, TRUE);