On Mon, 28 Mar 2011 10:56:08 -0400, Adam Jackson <a...@redhat.com> wrote:

> No code to create objects of this type ever existed.

I suspect that's a bug then -- the damage object is going to hang around
with a dead pointer to the window when it is destroyed.

Here's a completely untested patch that hooks the window id to the
damage record so that it is destroyed when the window is destroyed:

I think this gets the ENOMEM case right -- AddResource will call 
FreeDamageExtWin if it fails, which will call FreeResource on the damage
ID, freeing the damage structure.

diff --git a/damageext/damageext.c b/damageext/damageext.c
index 754383d..20f772b 100644
--- a/damageext/damageext.c
+++ b/damageext/damageext.c
@@ -220,8 +220,10 @@ ProcDamageCreate (ClientPtr client)
     DamageSetReportAfterOp (pDamageExt->pDamage, TRUE);
     DamageRegister (pDamageExt->pDrawable, pDamageExt->pDamage);
 
-    if (pDrawable->type == DRAWABLE_WINDOW)
+    if (WindowDrawable(pDrawable->type))
     {
+       if (!AddResource (pDrawable->id, DamageExtWinType, (pointer) 
pDamageExt))
+           return BadAlloc;
        pRegion = &((WindowPtr) pDrawable)->borderClip;
        DamageDamageRegion(pDrawable, pRegion);
     }

-- 
keith.pack...@intel.com

Attachment: pgpQ3pNhXzKtv.pgp
Description: PGP signature

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to