]> Pileus Git - grits/commitdiff
Fix memory leaks
authorAndy Spencer <andy753421@gmail.com>
Thu, 27 Oct 2011 07:18:02 +0000 (07:18 +0000)
committerAndy Spencer <andy753421@gmail.com>
Thu, 27 Oct 2011 07:28:24 +0000 (07:28 +0000)
src/.vimrc
src/Makefile.am
src/data/grits-http.c
src/grits-test.c
src/gtk.suppression
src/objects/grits-poly.c

index 2dd11275baf44f5a8f7a905bb70f3f48e01fff3c..df75c3f5d7fcecd1f5d3b0b6dbae74ab1c2f5eda 100644 (file)
@@ -1,5 +1,5 @@
 set makeprg=make\ test
 "set tw=100
 
-au FileType valgrind syn match gritsFile "\v<(grits-\w+|roam|elev|env|map|sat|test|radar)\.c>" containedin=valgrindSrc
+au FileType valgrind syn match gritsFile "\v<(grits-\w+|roam|elev|env|map|sat|test|radar|alert)\.c>" containedin=valgrindSrc
 au FileType valgrind hi link gritsFile Error
index c4ad298912715d44ce30463c2593e6b4e34f6eec..cc17c40a5fc77163a190c31b9f1624f76e4ff905 100644 (file)
@@ -98,5 +98,5 @@ memcheck: all
                 --num-callers=50               \
                 --suppressions=gtk.suppression \
                 --suppressions=/usr/lib/valgrind/default.supp \
-                ./grits-test                   \
+                .libs/grits-test               \
        2> valgrind.out
index 3b0c83ebd6c9fa8774db46cd63b009043a87fc92..8880d7484710186e7534dc85d985a409a8260864 100644 (file)
@@ -192,26 +192,28 @@ gchar *grits_http_fetch(GritsHttp *http, const gchar *uri, const char *local,
 
                /* Close file */
                fclose(fp);
-               if (path != part && SOUP_STATUS_IS_SUCCESSFUL(message->status_code)) {
-                       g_rename(part, path);
+               if (path != part) {
+                       if (SOUP_STATUS_IS_SUCCESSFUL(message->status_code))
+                               g_rename(part, path);
                        g_free(part);
                }
 
                /* Finished */
-               if (message->status_code == SOUP_STATUS_CANCELLED) {
+               guint status = message->status_code;
+               g_object_unref(message);
+               if (status == SOUP_STATUS_CANCELLED) {
                        return NULL;
-               } else if (message->status_code == SOUP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE) {
+               } else if (status == SOUP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE) {
                        /* Range unsatisfiable, file already complete */
-               } else if (!SOUP_STATUS_IS_SUCCESSFUL(message->status_code)) {
+               } else if (!SOUP_STATUS_IS_SUCCESSFUL(status)) {
                        g_warning("GritsHttp: done_cb - error copying file, status=%d\n"
                                        "\tsrc=%s\n"
                                        "\tdst=%s",
-                                       message->status_code, uri, path);
+                                       status, uri, path);
                        return NULL;
                }
        }
 
-
        /* TODO: free everything.. */
        return path;
 }
index 5be869b6ccc03d635490ae880070278f4ae931c9..695f4f9671f4ed866cee7d141aff098af0159a27 100644 (file)
@@ -100,5 +100,10 @@ int main(int argc, char **argv)
        gdk_threads_leave();
 
        gdk_display_close(gdk_display_get_default());
+
+       prefs   = NULL;
+       plugins = NULL;
+       viewer  = NULL;
+       window  = vbox = config = NULL;
        return 0;
 }
index 4365b951e980971d9c5161ece5f93e8e8e68fef1..aab9a830a782ed3e26318e195b7d5a2f76817e08 100644 (file)
        fun:g_module_symbol
        fun:g_module_open
 }
+{
+       g_class_ref__leak
+       Memcheck:Leak
+       fun:malloc
+       fun:g_malloc
+       fun:g_memdup
+       fun:type_iface_vtable_base_init_Wm
+       fun:g_type_class_ref
+}
 
 # GTK+
 {
index 1a1e6148c0e0252cef9887519c3cea7d09f5a1da..720e3b1bed37ea29f5af2d7c94104b8a6d539eb9 100644 (file)
@@ -114,6 +114,12 @@ static void grits_poly_pick(GritsObject *_poly, GritsOpenGL *opengl)
        glPopAttrib();
 }
 
+static gboolean grits_poly_delete(gpointer list)
+{
+       glDeleteLists((guint)list, 1);
+       return FALSE;
+}
+
 /**
  * grits_poly_new:
  * @points:  TODO
@@ -131,6 +137,13 @@ GritsPoly *grits_poly_new(gdouble (**points)[3])
        return poly;
 }
 
+static void _free_points(gdouble (**points)[3])
+{
+       for (int i = 0; points[i]; i++)
+               g_free(points[i]);
+       g_free(points);
+}
+
 GritsPoly *grits_poly_parse(const gchar *str,
                const gchar *poly_sep, const gchar *point_sep, const gchar *coord_sep)
 {
@@ -164,6 +177,7 @@ GritsPoly *grits_poly_parse(const gchar *str,
                polys[pi] = coords;
                g_strfreev(scoords);
        }
+       g_strfreev(spolys);
 
        /* Create GritsPoly */
        GritsPoly *poly = grits_poly_new(polys);
@@ -171,6 +185,7 @@ GritsPoly *grits_poly_parse(const gchar *str,
        GRITS_OBJECT(poly)->center.lon  = lon_avg(bounds.e, bounds.w);
        GRITS_OBJECT(poly)->center.elev = 0;
        GRITS_OBJECT(poly)->skip        = GRITS_SKIP_CENTER;
+       g_object_weak_ref(G_OBJECT(poly), (GWeakNotify)_free_points, polys);
        return poly;
 }
 
@@ -188,10 +203,10 @@ static void grits_poly_init(GritsPoly *poly)
 
 static void grits_poly_finalize(GObject *_poly)
 {
-       g_debug("GritsPoly: finalize");
+       //g_debug("GritsPoly: finalize");
        GritsPoly *poly = GRITS_POLY(_poly);
-       (void)poly;
-       // TODO: free points
+       if (poly->list[0]) g_idle_add(grits_poly_delete, (gpointer)poly->list[0]);
+       if (poly->list[1]) g_idle_add(grits_poly_delete, (gpointer)poly->list[1]);
 }
 
 static void grits_poly_class_init(GritsPolyClass *klass)