From c181cd8efcaacfd65d289eae319292a944402b87 Mon Sep 17 00:00:00 2001 From: 3 Date: Tue, 23 Jan 2001 14:37:54 +0000 Subject: [PATCH] Don't leak built-in cursors. 2001-01-23 * linux-fb/gdkcursor-fb.c: Don't leak built-in cursors. * linux-fb/gdkdrawable-fb2.c (gdk_fb_draw_polygon): Don't leak tmp_points. * linux-fb/gdkfont-fb.c (gdk_font_from_description): Don't modify desc. Don't leak font if the PangoFont isn't found. * linux-fb/gdkgc-fb.c (gdk_fb_gc_finalize): Free dash_list. * linux-fb/gdkkeyboard-fb.c (gdk_fb_handle_key): Don't leak string. --- ChangeLog | 18 +++++++++++++++ ChangeLog.pre-2-0 | 18 +++++++++++++++ ChangeLog.pre-2-10 | 18 +++++++++++++++ ChangeLog.pre-2-2 | 18 +++++++++++++++ ChangeLog.pre-2-4 | 18 +++++++++++++++ ChangeLog.pre-2-6 | 18 +++++++++++++++ ChangeLog.pre-2-8 | 18 +++++++++++++++ gdk/linux-fb/gdkcursor-fb.c | 41 +++++++++++++++++----------------- gdk/linux-fb/gdkdrawable-fb2.c | 5 +++++ gdk/linux-fb/gdkfont-fb.c | 7 +++++- gdk/linux-fb/gdkgc-fb.c | 2 ++ gdk/linux-fb/gdkkeyboard-fb.c | 2 ++ 12 files changed, 162 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 57cd0559c8..6c6bef5f5c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2001-01-23 + + * linux-fb/gdkcursor-fb.c: + Don't leak built-in cursors. + + * linux-fb/gdkdrawable-fb2.c (gdk_fb_draw_polygon): + Don't leak tmp_points. + + * linux-fb/gdkfont-fb.c (gdk_font_from_description): + Don't modify desc. Don't leak font if the PangoFont + isn't found. + + * linux-fb/gdkgc-fb.c (gdk_fb_gc_finalize): + Free dash_list. + + * linux-fb/gdkkeyboard-fb.c (gdk_fb_handle_key): + Don't leak string. + 2001-01-20 Havoc Pennington * gtk/gtktexttag.h (enum GtkWrapMode): rename member fields diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 57cd0559c8..6c6bef5f5c 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,21 @@ +2001-01-23 + + * linux-fb/gdkcursor-fb.c: + Don't leak built-in cursors. + + * linux-fb/gdkdrawable-fb2.c (gdk_fb_draw_polygon): + Don't leak tmp_points. + + * linux-fb/gdkfont-fb.c (gdk_font_from_description): + Don't modify desc. Don't leak font if the PangoFont + isn't found. + + * linux-fb/gdkgc-fb.c (gdk_fb_gc_finalize): + Free dash_list. + + * linux-fb/gdkkeyboard-fb.c (gdk_fb_handle_key): + Don't leak string. + 2001-01-20 Havoc Pennington * gtk/gtktexttag.h (enum GtkWrapMode): rename member fields diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 57cd0559c8..6c6bef5f5c 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,21 @@ +2001-01-23 + + * linux-fb/gdkcursor-fb.c: + Don't leak built-in cursors. + + * linux-fb/gdkdrawable-fb2.c (gdk_fb_draw_polygon): + Don't leak tmp_points. + + * linux-fb/gdkfont-fb.c (gdk_font_from_description): + Don't modify desc. Don't leak font if the PangoFont + isn't found. + + * linux-fb/gdkgc-fb.c (gdk_fb_gc_finalize): + Free dash_list. + + * linux-fb/gdkkeyboard-fb.c (gdk_fb_handle_key): + Don't leak string. + 2001-01-20 Havoc Pennington * gtk/gtktexttag.h (enum GtkWrapMode): rename member fields diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 57cd0559c8..6c6bef5f5c 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,21 @@ +2001-01-23 + + * linux-fb/gdkcursor-fb.c: + Don't leak built-in cursors. + + * linux-fb/gdkdrawable-fb2.c (gdk_fb_draw_polygon): + Don't leak tmp_points. + + * linux-fb/gdkfont-fb.c (gdk_font_from_description): + Don't modify desc. Don't leak font if the PangoFont + isn't found. + + * linux-fb/gdkgc-fb.c (gdk_fb_gc_finalize): + Free dash_list. + + * linux-fb/gdkkeyboard-fb.c (gdk_fb_handle_key): + Don't leak string. + 2001-01-20 Havoc Pennington * gtk/gtktexttag.h (enum GtkWrapMode): rename member fields diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 57cd0559c8..6c6bef5f5c 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,21 @@ +2001-01-23 + + * linux-fb/gdkcursor-fb.c: + Don't leak built-in cursors. + + * linux-fb/gdkdrawable-fb2.c (gdk_fb_draw_polygon): + Don't leak tmp_points. + + * linux-fb/gdkfont-fb.c (gdk_font_from_description): + Don't modify desc. Don't leak font if the PangoFont + isn't found. + + * linux-fb/gdkgc-fb.c (gdk_fb_gc_finalize): + Free dash_list. + + * linux-fb/gdkkeyboard-fb.c (gdk_fb_handle_key): + Don't leak string. + 2001-01-20 Havoc Pennington * gtk/gtktexttag.h (enum GtkWrapMode): rename member fields diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 57cd0559c8..6c6bef5f5c 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,21 @@ +2001-01-23 + + * linux-fb/gdkcursor-fb.c: + Don't leak built-in cursors. + + * linux-fb/gdkdrawable-fb2.c (gdk_fb_draw_polygon): + Don't leak tmp_points. + + * linux-fb/gdkfont-fb.c (gdk_font_from_description): + Don't modify desc. Don't leak font if the PangoFont + isn't found. + + * linux-fb/gdkgc-fb.c (gdk_fb_gc_finalize): + Free dash_list. + + * linux-fb/gdkkeyboard-fb.c (gdk_fb_handle_key): + Don't leak string. + 2001-01-20 Havoc Pennington * gtk/gtktexttag.h (enum GtkWrapMode): rename member fields diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 57cd0559c8..6c6bef5f5c 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,21 @@ +2001-01-23 + + * linux-fb/gdkcursor-fb.c: + Don't leak built-in cursors. + + * linux-fb/gdkdrawable-fb2.c (gdk_fb_draw_polygon): + Don't leak tmp_points. + + * linux-fb/gdkfont-fb.c (gdk_font_from_description): + Don't modify desc. Don't leak font if the PangoFont + isn't found. + + * linux-fb/gdkgc-fb.c (gdk_fb_gc_finalize): + Free dash_list. + + * linux-fb/gdkkeyboard-fb.c (gdk_fb_handle_key): + Don't leak string. + 2001-01-20 Havoc Pennington * gtk/gtktexttag.h (enum GtkWrapMode): rename member fields diff --git a/gdk/linux-fb/gdkcursor-fb.c b/gdk/linux-fb/gdkcursor-fb.c index fd5288e688..843678d6b0 100644 --- a/gdk/linux-fb/gdkcursor-fb.c +++ b/gdk/linux-fb/gdkcursor-fb.c @@ -33,7 +33,7 @@ static struct { const guchar *bits; int width, height, hotx, hoty; - GdkPixmap *pm; + GdkCursor *cursor; } stock_cursors[] = { {X_cursor_bits, X_cursor_width, X_cursor_height, X_cursor_x_hot, X_cursor_y_hot}, {X_cursor_mask_bits, X_cursor_mask_width, X_cursor_mask_height, X_cursor_mask_x_hot, X_cursor_mask_y_hot}, @@ -194,21 +194,24 @@ static struct { GdkCursor* gdk_cursor_new (GdkCursorType cursor_type) { - GdkPixmap *tmp_pm, *pm, *mask; - + GdkCursor *cursor; + if (cursor_type >= sizeof(stock_cursors)/sizeof(stock_cursors[0])) return NULL; - pm = stock_cursors[cursor_type].pm; - if (!pm) + cursor = stock_cursors[cursor_type].cursor; + if (!cursor) { + GdkPixmap *tmp_pm, *pm, *mask; GdkGC *copy_gc; char *data; + tmp_pm = gdk_bitmap_create_from_data (gdk_parent_root, stock_cursors[cursor_type].bits, stock_cursors[cursor_type].width, stock_cursors[cursor_type].height); + /* Create an empty bitmap the size of the mask */ data = g_malloc0 (((stock_cursors[cursor_type+1].width+7)/8) * stock_cursors[cursor_type+1].height); pm = gdk_bitmap_create_from_data (gdk_parent_root, data, @@ -227,24 +230,18 @@ gdk_cursor_new (GdkCursorType cursor_type) g_free (data); gdk_gc_unref (copy_gc); - stock_cursors[cursor_type].pm = pm; - gdk_pixmap_ref (pm); - } - - mask = stock_cursors[cursor_type+1].pm; - if (!mask) - { - mask = stock_cursors[cursor_type+1].pm = gdk_bitmap_create_from_data (gdk_parent_root, - stock_cursors[cursor_type+1].bits, - stock_cursors[cursor_type+1].width, - stock_cursors[cursor_type+1].height); - gdk_pixmap_ref (mask); - } + mask = gdk_bitmap_create_from_data (gdk_parent_root, + stock_cursors[cursor_type+1].bits, + stock_cursors[cursor_type+1].width, + stock_cursors[cursor_type+1].height); - - return gdk_cursor_new_from_pixmap (pm, mask, NULL, NULL, + cursor = gdk_cursor_new_from_pixmap (pm, mask, NULL, NULL, stock_cursors[cursor_type+1].hotx, stock_cursors[cursor_type+1].hoty); + + stock_cursors[cursor_type].cursor = cursor; + } + return gdk_cursor_ref (cursor); } GdkCursor* @@ -282,6 +279,10 @@ _gdk_cursor_destroy (GdkCursor *cursor) private = (GdkCursorPrivateFB *) cursor; + if (private->mask) + gdk_pixmap_unref (private->mask); + gdk_pixmap_unref (private->cursor); + g_free (private); } diff --git a/gdk/linux-fb/gdkdrawable-fb2.c b/gdk/linux-fb/gdkdrawable-fb2.c index 43845b2c74..9c0ea77fab 100644 --- a/gdk/linux-fb/gdkdrawable-fb2.c +++ b/gdk/linux-fb/gdkdrawable-fb2.c @@ -1071,12 +1071,14 @@ gdk_fb_draw_polygon (GdkDrawable *drawable, else { gint tmp_npoints; + gboolean free_points = FALSE; GdkPoint *tmp_points; if (points[0].x != points[npoints-1].x || points[0].y != points[npoints-1].y) { tmp_npoints = npoints + 1; tmp_points = g_new (GdkPoint, tmp_npoints); + free_points = TRUE; memcpy (tmp_points, points, sizeof(GdkPoint) * npoints); tmp_points[npoints].x = points[0].x; tmp_points[npoints].y = points[0].y; @@ -1088,6 +1090,9 @@ gdk_fb_draw_polygon (GdkDrawable *drawable, } gdk_fb_draw_lines (drawable, gc, tmp_points, tmp_npoints); + + if (free_points) + g_free (tmp_points); } } diff --git a/gdk/linux-fb/gdkfont-fb.c b/gdk/linux-fb/gdkfont-fb.c index 627be57236..ed150bd58b 100644 --- a/gdk/linux-fb/gdkfont-fb.c +++ b/gdk/linux-fb/gdkfont-fb.c @@ -109,6 +109,7 @@ gdk_font_from_description (PangoFontDescription *desc) pango_font = pango_context_load_font (context, desc); if (!pango_font) { + desc = pango_font_description_copy (desc); g_free (desc->family_name); desc->family_name = g_strdup ("sans"); pango_font = pango_context_load_font (context, desc); @@ -120,12 +121,16 @@ gdk_font_from_description (PangoFontDescription *desc) desc->stretch = PANGO_STRETCH_NORMAL; pango_font = pango_context_load_font (context, desc); } + pango_font_description_free (desc); } g_assert (pango_font != NULL); if (pango_font == NULL) - return NULL; + { + g_free (private); + return NULL; + } metrics.ascent = 0; metrics.descent = 0; diff --git a/gdk/linux-fb/gdkgc-fb.c b/gdk/linux-fb/gdkgc-fb.c index 6878c79743..ba707c286c 100644 --- a/gdk/linux-fb/gdkgc-fb.c +++ b/gdk/linux-fb/gdkgc-fb.c @@ -111,6 +111,8 @@ gdk_fb_gc_finalize (GObject *obj) if (private->values.tile) gdk_pixmap_unref (private->values.tile); + g_free (private->dash_list); + G_OBJECT_CLASS (parent_class)->finalize (obj); } diff --git a/gdk/linux-fb/gdkkeyboard-fb.c b/gdk/linux-fb/gdkkeyboard-fb.c index 7b1eb00dd0..c48164c32f 100644 --- a/gdk/linux-fb/gdkkeyboard-fb.c +++ b/gdk/linux-fb/gdkkeyboard-fb.c @@ -386,6 +386,8 @@ gdk_fb_handle_key (guint hw_keycode, event->key.hardware_keycode = hw_keycode; event->key.group = group; } + else + g_free (string); } /******************************************************