From 0f969b6ced7e9ebcbe4bc4e17867ff32d67f27bb Mon Sep 17 00:00:00 2001 From: Alex Merry Date: Mon, 25 Mar 2013 18:15:11 +0000 Subject: Catch some memory leaks Memory usage on Linux no longer shoots up after running the tikz parser a handful of times. --- tikzit/src/gtk/Configuration.m | 4 ++++ tikzit/src/gtk/GraphEditorPanel.m | 5 ++++- tikzit/src/gtk/Menu.m | 2 ++ tikzit/src/gtk/PropertiesPane.m | 12 ++++++++++++ tikzit/src/gtk/PropertyListEditor.h | 5 +++-- tikzit/src/gtk/PropertyListEditor.m | 7 +++++++ tikzit/src/gtk/main.m | 1 + 7 files changed, 33 insertions(+), 3 deletions(-) (limited to 'tikzit/src/gtk') diff --git a/tikzit/src/gtk/Configuration.m b/tikzit/src/gtk/Configuration.m index 6ac08e8..4a3ed79 100644 --- a/tikzit/src/gtk/Configuration.m +++ b/tikzit/src/gtk/Configuration.m @@ -272,6 +272,7 @@ for (int i = 0; i < length; ++i) { [result addObject:[NSString stringWithUTF8String:list[i]]]; } + g_strfreev (list); return result; } else { return def; @@ -292,6 +293,7 @@ for (int i = 0; i < length; ++i) { [result addObject:[NSNumber numberWithBool:list[i]]]; } + g_free (list); return result; } else { return def; @@ -312,6 +314,7 @@ for (int i = 0; i < length; ++i) { [result addObject:[NSNumber numberWithInt:list[i]]]; } + g_free (list); return result; } else { return def; @@ -332,6 +335,7 @@ for (int i = 0; i < length; ++i) { [result addObject:[NSNumber numberWithDouble:list[i]]]; } + g_free (list); return result; } else { return def; diff --git a/tikzit/src/gtk/GraphEditorPanel.m b/tikzit/src/gtk/GraphEditorPanel.m index a1c63a2..fc50afc 100644 --- a/tikzit/src/gtk/GraphEditorPanel.m +++ b/tikzit/src/gtk/GraphEditorPanel.m @@ -125,9 +125,12 @@ return self; } - (id) init { - [self dealloc]; + [self release]; return nil; } +- (void) dealloc { + [super dealloc]; +} // FIXME: use a local copy of HandTool to implement CTRL-dragging - (void) mousePressAt:(NSPoint)pos withButton:(MouseButton)button andMask:(InputMask)mask { diff --git a/tikzit/src/gtk/Menu.m b/tikzit/src/gtk/Menu.m index 677b48f..0eb8ba8 100644 --- a/tikzit/src/gtk/Menu.m +++ b/tikzit/src/gtk/Menu.m @@ -679,8 +679,10 @@ static void tool_cb (GtkAction *action, id tool) { - (void) dealloc { g_free (nodeSelBasedActions); + g_free (edgeSelBasedActions); g_free (selBasedActions); g_object_unref (menubar); + g_object_unref (appActions); g_object_unref (windowActions); [super dealloc]; diff --git a/tikzit/src/gtk/PropertiesPane.m b/tikzit/src/gtk/PropertiesPane.m index a062bae..c42dded 100644 --- a/tikzit/src/gtk/PropertiesPane.m +++ b/tikzit/src/gtk/PropertiesPane.m @@ -463,6 +463,10 @@ static void edge_node_toggled_cb (GtkToggleButton *widget, PropertiesPane *pane) } return self; } +- (void) dealloc { + // doc is not retained + [super dealloc]; +} - (void) setDocument:(TikzDocument*)d { doc = d; } @@ -490,6 +494,10 @@ static void edge_node_toggled_cb (GtkToggleButton *widget, PropertiesPane *pane) } return self; } +- (void) dealloc { + // doc,node not retained + [super dealloc]; +} - (void) setDocument:(TikzDocument*)d { doc = d; node = nil; @@ -521,6 +529,10 @@ static void edge_node_toggled_cb (GtkToggleButton *widget, PropertiesPane *pane) } return self; } +- (void) dealloc { + // doc,edge not retained + [super dealloc]; +} - (void) setDocument:(TikzDocument*)d { doc = d; edge = nil; diff --git a/tikzit/src/gtk/PropertyListEditor.h b/tikzit/src/gtk/PropertyListEditor.h index 85fa8d2..2d3166a 100644 --- a/tikzit/src/gtk/PropertyListEditor.h +++ b/tikzit/src/gtk/PropertyListEditor.h @@ -28,12 +28,13 @@ @end @interface PropertyListEditor: NSObject { + GraphElementData *data; + NSObject *delegate; + GtkListStore *list; GtkWidget *view; - GraphElementData *data; GtkWidget *widget; GtkWidget *removeButton; - NSObject *delegate; } /*! diff --git a/tikzit/src/gtk/PropertyListEditor.m b/tikzit/src/gtk/PropertyListEditor.m index bc6d7ba..428050e 100644 --- a/tikzit/src/gtk/PropertyListEditor.m +++ b/tikzit/src/gtk/PropertyListEditor.m @@ -83,7 +83,9 @@ static void selection_changed_cb (GtkTreeSelection *selection, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_POINTER); + g_object_ref_sink (G_OBJECT (list)); view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list)); + g_object_ref_sink (G_OBJECT (view)); GtkWidget *scrolledview = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledview), GTK_POLICY_AUTOMATIC, @@ -197,10 +199,15 @@ static void selection_changed_cb (GtkTreeSelection *selection, - (void) dealloc { [self clearStore]; + [data release]; + [delegate release]; + g_object_unref (list); + g_object_unref (view); g_object_unref (widget); g_object_unref (removeButton); + [super dealloc]; } diff --git a/tikzit/src/gtk/main.m b/tikzit/src/gtk/main.m index f56a7b1..5d9f4a4 100644 --- a/tikzit/src/gtk/main.m +++ b/tikzit/src/gtk/main.m @@ -62,6 +62,7 @@ int main (int argc, char *argv[]) { } exit (1); } + g_option_context_free (context); #ifndef WINDOWS GList *icon_list = NULL; -- cgit v1.2.3