app: valgrind found a bunch of memory leaks

This commit is contained in:
Michael Natterer 2023-05-23 00:11:23 +02:00
parent 3b925cd78e
commit e4f0bb0dfe
8 changed files with 48 additions and 18 deletions

View File

@ -830,6 +830,7 @@ tools_actions_setup (GimpActionGroup *group)
tools_select_cmd_callback);
g_free (name);
g_free (long_label);
}
}
}

View File

@ -860,6 +860,7 @@ gimp_core_config_finalize (GObject *object)
GimpCoreConfig *core_config = GIMP_CORE_CONFIG (object);
g_free (core_config->language);
g_free (core_config->prev_language);
g_free (core_config->plug_in_path);
g_free (core_config->module_path);
g_free (core_config->interpreter_path);

View File

@ -348,6 +348,7 @@ gimp_extension_load (GimpExtension *extension,
appdata_name = g_strdup_printf ("%s.metainfo.xml",
gimp_object_get_name (GIMP_OBJECT (extension)));
path = g_build_filename (extension->p->path, appdata_name, NULL);
g_free (appdata_name);
app = as_app_new ();
success = as_app_parse_file (app, path,

View File

@ -243,8 +243,6 @@ gimp_display_shell_canvas_tick (GtkWidget *widget,
/* undo size request from gimp_display_shell_constructed() */
gtk_widget_set_size_request (widget, -1, -1);
g_free (tick);
return G_SOURCE_REMOVE;
}
@ -277,7 +275,7 @@ gimp_display_shell_canvas_size_allocate (GtkWidget *widget,
gtk_widget_add_tick_callback (widget,
(GtkTickCallback) gimp_display_shell_canvas_tick,
tick, NULL);
tick, (GDestroyNotify) g_free);
}
gboolean

View File

@ -635,6 +635,8 @@ gimp_statusbar_finalize (GObject *object)
g_clear_object (&statusbar->icon);
g_clear_pointer (&statusbar->icon_hash, g_hash_table_unref);
g_clear_pointer (&statusbar->cursor_string_last, g_free);
g_clear_pointer (&statusbar->cursor_string_todraw, g_free);
g_slist_free_full (statusbar->messages,
(GDestroyNotify) gimp_statusbar_msg_free);

View File

@ -864,9 +864,10 @@ gui_check_unique_accelerators (Gimp *gimp)
gchar *detailed_name;
detailed_name = g_strdup_printf ("app.%s", actions[i]);
accels = gtk_application_get_accels_for_action (GTK_APPLICATION (gimp->app),
detailed_name);
g_free (detailed_name);
for (gint j = 0; accels[j] != NULL; j++)
{
for (gint k = i + 1; actions[k] != NULL; k++)
@ -877,6 +878,8 @@ gui_check_unique_accelerators (Gimp *gimp)
detailed_name2 = g_strdup_printf ("app.%s", actions[k]);
accels2 = gtk_application_get_accels_for_action (GTK_APPLICATION (gimp->app),
detailed_name2);
g_free (detailed_name2);
for (gint l = 0; accels2[l] != NULL; l++)
{
if (g_strcmp0 (accels[j], accels2[l]) == 0)
@ -920,10 +923,13 @@ gui_check_unique_accelerators (Gimp *gimp)
(const gchar **) disabled_accels);
}
}
g_strfreev (accels2);
}
}
g_strfreev (accels);
}
g_strfreev (actions);
}

View File

@ -417,9 +417,9 @@ gimp_menu_model_get_position (GimpMenuModel *model,
for (iter = model->priv->items; iter; iter = iter->next)
{
const gchar *cur_action_name = NULL;
GMenuModel *subsection;
GMenuModel *submenu;
const gchar *cur_action_name = NULL;
subsection = g_menu_item_get_link (iter->data, G_MENU_LINK_SECTION);
submenu = g_menu_item_get_link (iter->data, G_MENU_LINK_SUBMENU);
@ -446,7 +446,8 @@ gimp_menu_model_get_position (GimpMenuModel *model,
else
real_action_name = cur_action_name;
cur_action = gimp_ui_manager_find_action (model->priv->manager, NULL, cur_action_name);
cur_action = gimp_ui_manager_find_action (model->priv->manager,
NULL, cur_action_name);
}
if (cur_action_name != NULL &&
@ -470,6 +471,7 @@ gimp_menu_model_get_position (GimpMenuModel *model,
len++;
}
}
g_clear_object (&subsection);
g_clear_object (&submenu);
}
@ -760,7 +762,8 @@ gimp_menu_model_initialize (GimpMenuModel *model,
G_CALLBACK (gimp_menu_model_action_notify_visible),
model, 0);
g_menu_item_get_attribute (item, "label-variant", "s", &label_variant);
g_menu_item_get_attribute (item, "label-variant", "s",
&label_variant);
if (g_strcmp0 (label_variant, "long") == 0)
g_menu_item_set_label (item, gimp_action_get_label (action));
else
@ -774,9 +777,11 @@ gimp_menu_model_initialize (GimpMenuModel *model,
"notify::label",
G_CALLBACK (gimp_menu_model_action_notify_label),
item, 0);
g_free (label_variant);
}
/* else we instal a placeholder (no-action and always invisible) item. */
/* else we instal a placeholder (no-action and always invisible) item. */
}
if (item)
@ -813,7 +818,7 @@ gimp_menu_model_handles_subpath (GimpMenuModel *model,
{
GMenuModel *submenu = NULL;
GMenuModel *subsection = NULL;
const gchar *label = NULL;
gchar *label = NULL;
GMenuItem *item = iter->data;
subsection = g_menu_item_get_link (item, G_MENU_LINK_SECTION);
@ -827,6 +832,7 @@ gimp_menu_model_handles_subpath (GimpMenuModel *model,
*/
if (! gimp_menu_model_handles_subpath (GIMP_MENU_MODEL (subsection), path))
{
g_free (label);
g_clear_object (&subsection);
return FALSE;
}
@ -837,18 +843,23 @@ gimp_menu_model_handles_subpath (GimpMenuModel *model,
g_return_val_if_fail (label != NULL, FALSE);
subpath = g_strdup_printf ("%s/", GIMP_MENU_MODEL (submenu)->priv->path);
if (g_strcmp0 (path, GIMP_MENU_MODEL (submenu)->priv->path) == 0 ||
g_str_has_prefix (path, subpath))
{
/* A submodel will handle the new path. */
g_free (subpath);
g_free (label);
g_clear_object (&subsection);
g_clear_object (&submenu);
return FALSE;
}
g_free (subpath);
}
g_free (label);
g_clear_object (&subsection);
g_clear_object (&submenu);
}
@ -866,9 +877,9 @@ gimp_menu_model_get_item (GimpMenuModel *model,
for (GList *iter = m->priv->items; iter; iter = iter->next)
{
const gchar *action_name = NULL;
GMenuModel *subsection;
GMenuModel *submenu;
const gchar *action_name = NULL;
subsection = g_menu_item_get_link (iter->data, G_MENU_LINK_SECTION);
submenu = g_menu_item_get_link (iter->data, G_MENU_LINK_SUBMENU);
@ -886,7 +897,9 @@ gimp_menu_model_get_item (GimpMenuModel *model,
{
GimpAction *action;
action = gimp_ui_manager_find_action (model->priv->manager, NULL, action_name);
action = gimp_ui_manager_find_action (model->priv->manager, NULL,
action_name);
if (gimp_action_is_visible (action))
cur++;
}
@ -975,7 +988,8 @@ gimp_menu_model_action_notify_visible (GimpAction *action,
gint pos;
gboolean visible;
pos = gimp_menu_model_get_position (model, gimp_action_get_name (action), &visible);
pos = gimp_menu_model_get_position (model, gimp_action_get_name (action),
&visible);
if (visible)
g_menu_model_items_changed (G_MENU_MODEL (model), pos, 0, 1);

View File

@ -576,7 +576,8 @@ gimp_ui_manager_remove_ui (GimpUIManager *manager,
if (g_strcmp0 (item->action_name, action_name) == 0)
{
g_signal_emit (manager, manager_signals[UI_REMOVED], 0, item->path, item->action_name);
g_signal_emit (manager, manager_signals[UI_REMOVED], 0,
item->path, item->action_name);
manager->ui_items = g_list_remove_link (manager->ui_items, iter);
gimp_ui_manager_menu_item_free (item);
break;
@ -601,8 +602,10 @@ gimp_ui_manager_remove_uis (GimpUIManager *manager,
if (action_name_prefix == NULL ||
g_str_has_prefix (item->action_name, action_name_prefix))
{
g_signal_emit (manager, manager_signals[UI_REMOVED], 0, item->path, item->action_name);
manager->ui_items = g_list_remove_link (manager->ui_items, current_iter);
g_signal_emit (manager, manager_signals[UI_REMOVED], 0,
item->path, item->action_name);
manager->ui_items = g_list_remove_link (manager->ui_items,
current_iter);
gimp_ui_manager_menu_item_free (item);
}
}
@ -624,11 +627,13 @@ gimp_ui_manager_add_ui (GimpUIManager *manager,
item = g_slice_new0 (GimpUIManagerMenuItem);
item->path = g_strdup (path);
item->action_name = g_strdup (action_name);
item->placeholder = placeholder ? g_strdup (placeholder) : NULL;
item->placeholder = g_strdup (placeholder);
item->top = top;
manager->ui_items = g_list_prepend (manager->ui_items, item);
g_signal_emit (manager, manager_signals[UI_ADDED], 0, path, action_name, placeholder, top);
g_signal_emit (manager, manager_signals[UI_ADDED], 0,
path, action_name, placeholder, top);
}
void
@ -640,7 +645,8 @@ gimp_ui_manager_foreach_ui (GimpUIManager *manager,
{
GimpUIManagerMenuItem *item = iter->data;
callback (manager, item->path, item->action_name, item->placeholder, item->top, user_data);
callback (manager, item->path, item->action_name, item->placeholder,
item->top, user_data);
}
}
@ -1145,6 +1151,7 @@ gimp_ui_manager_menu_item_free (GimpUIManagerMenuItem *item)
{
g_free (item->path);
g_free (item->action_name);
g_free (item->placeholder);
g_slice_free (GimpUIManagerMenuItem, item);
}