[geany/geany] 31bc70: Fix one-off leak by allocating PropertyDialogElements on the stack

Matthew Brush git-noreply at xxxxx
Thu Jul 26 00:02:50 UTC 2012


Branch:      refs/heads/document-messages
Author:      Matthew Brush <matt at geany.org>
Committer:   Matthew Brush <matt at geany.org>
Date:        Sun, 08 Jan 2012 19:48:54
Commit:      31bc70d0f3f0d3854627aad6b2874950d1edcede
             https://github.com/geany/geany/commit/31bc70d0f3f0d3854627aad6b2874950d1edcede

Log Message:
-----------
Fix one-off leak by allocating PropertyDialogElements on the stack

Also prevents following a whole code path for nothing, by only calling
create_properties_dialog() once per run.


Modified Paths:
--------------
    src/project.c

Modified: src/project.c
53 files changed, 25 insertions(+), 28 deletions(-)
===================================================================
@@ -484,8 +484,6 @@ static void create_properties_dialog(PropertyDialogElements *e)
 			G_CALLBACK(on_radio_long_line_custom_toggled),
 			ui_lookup_widget(e->dialog, "spin_long_line_project"));
 	}
-
-	insert_build_page(e);
 }
 
 
@@ -494,41 +492,40 @@ static void show_project_properties(gboolean show_build)
 	GeanyProject *p = app->project;
 	GtkWidget *widget = NULL;
 	GtkWidget *radio_long_line_custom;
-	static PropertyDialogElements *e = NULL;
+	static PropertyDialogElements e = { 0 };
 
 	g_return_if_fail(app->project != NULL);
 
-	/* note: leaks one per run of Geany */
-	if (e == NULL)
-		e = g_new0(PropertyDialogElements, 1);
-
 	entries_modified = FALSE;
 
-	create_properties_dialog(e);
+	if (e.dialog == NULL)
+		create_properties_dialog(&e);
+
+	insert_build_page(&e);
 
-	stash_group_display(indent_group, e->dialog);
+	stash_group_display(indent_group, e.dialog);
 
 	/* fill the elements with the appropriate data */
-	gtk_entry_set_text(GTK_ENTRY(e->name), p->name);
-	gtk_label_set_text(GTK_LABEL(e->file_name), p->file_name);
-	gtk_entry_set_text(GTK_ENTRY(e->base_path), p->base_path);
+	gtk_entry_set_text(GTK_ENTRY(e.name), p->name);
+	gtk_label_set_text(GTK_LABEL(e.file_name), p->file_name);
+	gtk_entry_set_text(GTK_ENTRY(e.base_path), p->base_path);
 
-	radio_long_line_custom = ui_lookup_widget(e->dialog, "radio_long_line_custom_project");
+	radio_long_line_custom = ui_lookup_widget(e.dialog, "radio_long_line_custom_project");
 	switch (p->long_line_behaviour)
 	{
-		case 0: widget = ui_lookup_widget(e->dialog, "radio_long_line_disabled_project"); break;
-		case 1: widget = ui_lookup_widget(e->dialog, "radio_long_line_default_project"); break;
+		case 0: widget = ui_lookup_widget(e.dialog, "radio_long_line_disabled_project"); break;
+		case 1: widget = ui_lookup_widget(e.dialog, "radio_long_line_default_project"); break;
 		case 2: widget = radio_long_line_custom; break;
 	}
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
 
-	widget = ui_lookup_widget(e->dialog, "spin_long_line_project");
+	widget = ui_lookup_widget(e.dialog, "spin_long_line_project");
 	gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), (gdouble)p->long_line_column);
 	on_radio_long_line_custom_toggled(GTK_TOGGLE_BUTTON(radio_long_line_custom), widget);
 
 	if (p->description != NULL)
 	{	/* set text */
-		GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(e->description));
+		GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(e.description));
 		gtk_text_buffer_set_text(buffer, p->description, -1);
 	}
 
@@ -537,24 +534,24 @@ static void show_project_properties(gboolean show_build)
 		gchar *str;
 
 		str = g_strjoinv(" ", p->file_patterns);
-		gtk_entry_set_text(GTK_ENTRY(e->patterns), str);
+		gtk_entry_set_text(GTK_ENTRY(e.patterns), str);
 		g_free(str);
 	}
 
-	g_signal_emit_by_name(geany_object, "project-dialog-create", e->notebook);
-	gtk_widget_show_all(e->dialog);
+	g_signal_emit_by_name(geany_object, "project-dialog-create", e.notebook);
+	gtk_widget_show_all(e.dialog);
 
 	/* note: notebook page must be shown before setting current page */
 	if (show_build)
-		gtk_notebook_set_current_page(GTK_NOTEBOOK(e->notebook), e->build_page_num);
+		gtk_notebook_set_current_page(GTK_NOTEBOOK(e.notebook), e.build_page_num);
 	else
-		gtk_notebook_set_current_page(GTK_NOTEBOOK(e->notebook), 0);
+		gtk_notebook_set_current_page(GTK_NOTEBOOK(e.notebook), 0);
 
-	while (gtk_dialog_run(GTK_DIALOG(e->dialog)) == GTK_RESPONSE_OK)
+	while (gtk_dialog_run(GTK_DIALOG(e.dialog)) == GTK_RESPONSE_OK)
 	{
-		if (update_config(e, FALSE))
+		if (update_config(&e, FALSE))
 		{
-			g_signal_emit_by_name(geany_object, "project-dialog-confirmed", e->notebook);
+			g_signal_emit_by_name(geany_object, "project-dialog-confirmed", e.notebook);
 			if (!write_config(TRUE))
 				SHOW_ERR(_("Project file could not be written"));
 			else
@@ -565,9 +562,9 @@ static void show_project_properties(gboolean show_build)
 		}
 	}
 
-	build_free_fields(e->build_properties);
-	gtk_notebook_remove_page(GTK_NOTEBOOK(e->notebook), e->build_page_num);
-	gtk_widget_hide(e->dialog);
+	build_free_fields(e.build_properties);
+	gtk_notebook_remove_page(GTK_NOTEBOOK(e.notebook), e.build_page_num);
+	gtk_widget_hide(e.dialog);
 }
 
 


@@ Diff output truncated at 100000 characters. @@


--------------
This E-Mail was brought to you by github_commit_mail.py (Source: TBD).



More information about the Commits mailing list