From f306cd557ef263ff5057e413c335cc75bc0f7895 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Tue, 26 Jun 2012 14:59:37 +0100 Subject: [PATCH] sna/dri: Hold a reference to the cached DRI2 buffer on the front buffer Signed-off-by: Chris Wilson --- src/sna/sna_dri.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/sna/sna_dri.c b/src/sna/sna_dri.c index 3c5722c0..dddcc738 100644 --- a/src/sna/sna_dri.c +++ b/src/sna/sna_dri.c @@ -229,7 +229,7 @@ sna_dri_create_buffer(DrawablePtr drawable, } FreeResourceByType(drawable->id, dri_drawable_type, - TRUE); + FALSE); } bo = sna_pixmap_set_dri(sna, pixmap); @@ -332,8 +332,9 @@ sna_dri_create_buffer(DrawablePtr drawable, if (pixmap) pixmap->refcnt++; - if (attachment == DRI2BufferFrontLeft) - (void)AddResource(drawable->id, dri_drawable_type, buffer); + if (attachment == DRI2BufferFrontLeft && + AddResource(drawable->id, dri_drawable_type, buffer)) + private->refcnt++; return buffer; @@ -843,6 +844,10 @@ static int sna_dri_drawable_gone(void *data, XID id) { DBG(("%s(%ld)\n", __FUNCTION__, (long)id)); + + _sna_dri_destroy_buffer(to_sna_from_pixmap(get_private(data)->pixmap), + data); + return Success; }