summaryrefslogtreecommitdiff
path: root/dix
diff options
context:
space:
mode:
authorRami Ylimaki <ext-rami.ylimaki@nokia.com>2009-11-04 15:59:30 +0200
committerKeith Packard <keithp@keithp.com>2009-11-04 08:26:18 -0800
commit0573042cddb6f9942e408687a16c6842e62a8bfa (patch)
tree558530c358a5514a0080e6e57e1a9de49f59751a /dix
parent412c56ef3332d09efbd861e41c3e985f44729729 (diff)
dix: Fixes a memory leak when a cursor resource is released.
Just open and close a client that creates cursors in order to reproduce. In the problem case bits->refcnt is -1 and therefore bits->devPrivates is never released. Signed-off-by: Rami Ylimaki <ext-rami.ylimaki@nokia.com> Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'dix')
-rw-r--r--dix/cursor.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/dix/cursor.c b/dix/cursor.c
index 086d008e0..6103b15e3 100644
--- a/dix/cursor.c
+++ b/dix/cursor.c
@@ -86,6 +86,8 @@ FreeCursorBits(CursorBitsPtr bits)
#ifdef ARGB_CURSOR
xfree(bits->argb);
#endif
+ dixFreePrivates(bits->devPrivates);
+ bits->devPrivates = NULL;
if (bits->refcnt == 0)
{
GlyphSharePtr *prev, this;
@@ -100,7 +102,6 @@ FreeCursorBits(CursorBitsPtr bits)
CloseFont(this->font, (Font)0);
xfree(this);
}
- dixFreePrivates(bits->devPrivates);
xfree(bits);
}
}