diff options
-rw-r--r-- | randr/rrcrtc.c | 23 |
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); |