diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2009-09-23 10:53:51 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2009-09-28 12:59:27 +1000 |
commit | f772014c435f56db56520ca13ffa39431684f122 (patch) | |
tree | bce31312f3f6806b6d6694862eb1b6b2eb0bed71 | |
parent | 3db28f92b0c810b452506abbed299a204c90ba0b (diff) |
render: Plug a memory leak in AddGlyph. (#23286)
AddGlyph was missing the FreePicture() call that DeleteGlyph used, resulting
in a memory leak when more than one Glyph was added in a RenderAddGlyphs
request.
Since the code in AddGlyph and DeleteGlyph is identical, move into a static
function to avoid such mistakes in the future.
X.Org Bug 23286 <http://bugs.freedesktop.org/show_bug.cgi?id=23286>
-rw-r--r-- | render/glyph.c | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/render/glyph.c b/render/glyph.c index 7c044aada..6327c9fda 100644 --- a/render/glyph.c +++ b/render/glyph.c @@ -274,2 +274,21 @@ CheckDuplicates (GlyphHashPtr hash, char *where) +static void +FreeGlyphPicture(GlyphPtr glyph) +{ + PictureScreenPtr ps; + int i; + + for (i = 0; i < screenInfo.numScreens; i++) + { + ScreenPtr pScreen = screenInfo.screens[i]; + + FreePicture ((pointer) GlyphPicture (glyph)[i], 0); + + ps = GetPictureScreenIfSet (pScreen); + if (ps) + (*ps->UnrealizeGlyph) (pScreen, glyph); + } +} + + void @@ -280,3 +299,2 @@ FreeGlyph (GlyphPtr glyph, int format) { - PictureScreenPtr ps; GlyphRefPtr gr; @@ -307,13 +325,3 @@ FreeGlyph (GlyphPtr glyph, int format) - for (i = 0; i < screenInfo.numScreens; i++) - { - ScreenPtr pScreen = screenInfo.screens[i]; - - FreePicture ((pointer) GlyphPicture (glyph)[i], 0); - - ps = GetPictureScreenIfSet (pScreen); - if (ps) - (*ps->UnrealizeGlyph) (pScreen, glyph); - } - + FreeGlyphPicture(glyph); FreeGlyphPrivates(glyph); @@ -336,11 +344,3 @@ AddGlyph (GlyphSetPtr glyphSet, GlyphPtr glyph, Glyph id) { - PictureScreenPtr ps; - int i; - - for (i = 0; i < screenInfo.numScreens; i++) - { - ps = GetPictureScreenIfSet (screenInfo.screens[i]); - if (ps) - (*ps->UnrealizeGlyph) (screenInfo.screens[i], glyph); - } + FreeGlyphPicture(glyph); FreeGlyphPrivates(glyph); |