From kaz@hypercore.co.jp Tue Apr 22 08:37:08 1997 Date: 22 Apr 1997 18:59:43 +0900 From: Kazuhiro Sasayama To: gimp-developer@scam.xcf.berkeley.edu Subject: [gimp-devel][patch] gimp 0.99.8 "app" memory leaks I found many memory leaks in gimp "app" and have tried to fix some of them today. There seem still many leaks allocated by gtk_type_new, but I cannot guess why they leak. --- gimp-0.99.8/app/channel.c 1997-04-22 16:19:26+09 1.1 +++ gimp-0.99.8/app/channel.c 1997-04-22 16:22:18+09 @@ -180,6 +180,12 @@ void channel_delete (Channel *channel) { + /* free the segments? */ + if (channel->segs_in) + g_free (channel->segs_in); + if (channel->segs_out) + g_free (channel->segs_out); + /* remove this image from the global list */ channel_list = remove_from_list (channel_list, (void *) channel); --- gimp-0.99.8/app/interface.c 1997-04-22 17:13:52+09 1.1 +++ gimp-0.99.8/app/interface.c 1997-04-22 17:14:44+09 @@ -198,7 +198,10 @@ tools_pop_label () { if (tool_rlabel) - gtk_label_set (GTK_LABEL (tool_label), tool_rlabel); + { + gtk_label_set (GTK_LABEL (tool_label), tool_rlabel); + g_free (tool_rlabel); + } tool_rlabel = NULL; } --- gimp-0.99.8/app/plug_in.c 1997-04-21 23:22:20+09 1.1 +++ gimp-0.99.8/app/plug_in.c 1997-04-22 18:36:49+09 @@ -407,14 +407,18 @@ GSList *list; char *extension; list = NULL; - extensions = g_strdup (extensions); - extension = strtok (extensions, " \t,"); - while (extension) + /* EXTENSIONS can be NULL. Avoid calling strtok if it is. */ + if (extensions) { - list = g_slist_prepend (list, g_strdup (extension)); - extension = strtok (NULL, " \t,"); + extensions = g_strdup (extensions); + extension = strtok (extensions, " \t,"); + while (extension) + { + list = g_slist_prepend (list, g_strdup (extension)); + extension = strtok (NULL, " \t,"); + } + g_free (extensions); } - g_free (extensions); return g_slist_reverse (list); } @@ -451,10 +455,22 @@ if (strcmp (proc_def->db_info.name, name) == 0) { - proc_def->extensions = g_strdup (extensions); + /* EXTENSIONS can be proc_def->extensions */ + if (proc_def->extensions != extensions) + { + if (proc_def->extensions) + g_free (proc_def->extensions); + proc_def->extensions = g_strdup (extensions); + } proc_def->extensions_list = plug_in_extensions_parse (proc_def->extensions); - proc_def->prefixes = g_strdup (prefixes); + /* PREFIXES can be proc_def->prefixes */ + if (proc_def->prefixes != prefixes) + { + if (proc_def->prefixes) + g_free (proc_def->prefixes); + proc_def->prefixes = g_strdup (prefixes); + } proc_def->prefixes_list = plug_in_extensions_parse (proc_def->prefixes); return proc_def; } --- gimp-0.99.8/app/selection.c 1997-04-22 16:26:51+09 1.1 +++ gimp-0.99.8/app/selection.c 1997-04-22 16:52:47+09 @@ -75,6 +75,8 @@ gdk_draw_line (pixmap, gc, i, j, i, j); } + gdk_gc_destroy (gc); + return pixmap; } @@ -204,6 +206,8 @@ } else select->segs_layer = NULL; + + g_free (segs_layer); } -- Kaz Sasayama, the designer of Hyperplay. PGP key fingerprint = 53 71 54 56 FB 3D 76 0B 92 5D 32 40 C5 34 38 00