diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2015-12-02 18:21:12 +0900 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2015-12-02 10:56:56 -0500 |
commit | 5bccde749db93296b7784e4cdc5e54c4443656c1 (patch) | |
tree | b3d7cbff710e473a3b3b3943829012d9088d219e /randr | |
parent | 2e3d9623ae3f562f81e513cb183ca1b1b68f279c (diff) |
randr: Stop dirty tracking for shared pixmap being destroyed
Otherwise, we leave a dangling reference to the destroyed pixmap in the
master screen's pixmap_dirty_list.
Fixes regression from commit cf5d6414 ("randr: Factor out shared pixmap
destruction").
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Diffstat (limited to 'randr')
-rw-r--r-- | randr/rrcrtc.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c index 8d9c5bb05..ec26fcda4 100644 --- a/randr/rrcrtc.c +++ b/randr/rrcrtc.c @@ -363,13 +363,18 @@ RRComputeContiguity(ScreenPtr pScreen) static void rrDestroySharedPixmap(RRCrtcPtr crtc, PixmapPtr pPixmap) { - if (crtc->pScreen->current_master && pPixmap->master_pixmap) { + ScreenPtr master = crtc->pScreen->current_master; + + if (master && pPixmap->master_pixmap) { + PixmapPtr mscreenpix = master->GetScreenPixmap(master); + + master->StopPixmapTracking(mscreenpix, pPixmap); /* * 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); + master->DestroyPixmap(pPixmap->master_pixmap); + master->DestroyPixmap(pPixmap->master_pixmap); } crtc->pScreen->DestroyPixmap(pPixmap); |