rpms/gnome-menus/devel gnome-menus-2.10.1-fix-parent-references.patch, NONE, 1.1 gnome-menus.spec, 1.8, 1.9
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Wed Apr 6 06:50:32 UTC 2005
Update of /cvs/dist/rpms/gnome-menus/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv22908
Modified Files:
gnome-menus.spec
Added Files:
gnome-menus-2.10.1-fix-parent-references.patch
Log Message:
* Wed Apr 6 2005 Mark McLoughlin <markmc at redhat.com> 2.10.1-2
- Backport patch from CVS to fix large memory leak on re-loading
the menus (gnome #172472)
gnome-menus-2.10.1-fix-parent-references.patch:
ChangeLog | 21 +++++++++++++++++++++
libmenu/desktop-entries.c | 2 ++
libmenu/entry-directories.c | 1 -
libmenu/menu-tree.c | 36 +++++++++++++++++++++++++++++-------
4 files changed, 52 insertions(+), 8 deletions(-)
--- NEW FILE gnome-menus-2.10.1-fix-parent-references.patch ---
--- gnome-menus-2.10.1/ChangeLog.fix-parent-references 2005-03-23 07:13:08.000000000 -0500
+++ gnome-menus-2.10.1/ChangeLog 2005-04-06 02:47:06.000000000 -0400
@@ -0,0 +1,21 @@
+2005-04-05 Mark McLoughlin <mark at skynet.ie>
+
+ Fix memory leaks on reload - bug #172472. Basically,
+ because of a cyclic reference we were leaking the entire
+ tree every time we reloaded.
+
+ * libmenu/menu-tree.c:
+ (menu_tree_directory_unref_and_unset_parent),
+ (menu_tree_entry_unref_and_unset_parent): helper functions.
+ (menu_tree_directory_unref): unset the parent reference
+ on entries and subdirs before unreffing them.
+ (menu_tree_entry_new): don't take a ref on the parent.
+ (process_layout), (process_only_unallocated): unset the
+ parent reference when deleting entries and subdirs.
+
+ * libmenu/desktop-entries.c: (desktop_entry_reload): add debug.
+
+ * libmenu/entry-directories.c: (cached_dir_update_entry): don't
+ unref the entry if reloading fails - desktop_entry_reload ()
+ does that.
+
--- gnome-menus-2.10.1/libmenu/desktop-entries.c.fix-parent-references 2005-03-08 12:59:26.000000000 -0500
+++ gnome-menus-2.10.1/libmenu/desktop-entries.c 2005-04-06 02:47:06.000000000 -0400
@@ -339,6 +339,8 @@
{
g_return_val_if_fail (entry != NULL, NULL);
+ menu_verbose ("Re-loading desktop entry \"%s\"\n", entry->path);
+
g_free (entry->categories);
entry->categories = NULL;
--- gnome-menus-2.10.1/libmenu/entry-directories.c.fix-parent-references 2005-03-16 02:26:26.000000000 -0500
+++ gnome-menus-2.10.1/libmenu/entry-directories.c 2005-04-06 02:47:07.000000000 -0400
@@ -347,7 +347,6 @@
{
if (!desktop_entry_reload (tmp->data))
{
- desktop_entry_unref (tmp->data);
dir->entries = g_slist_delete_link (dir->entries, tmp);
}
--- gnome-menus-2.10.1/libmenu/menu-tree.c.fix-parent-references 2005-03-22 05:34:24.000000000 -0500
+++ gnome-menus-2.10.1/libmenu/menu-tree.c 2005-04-06 02:47:07.000000000 -0400
@@ -102,6 +102,9 @@
MenuLayoutNode *layout);
static void menu_tree_force_recanonicalize (MenuTree *tree);
static void menu_tree_invoke_monitors (MenuTree *tree);
+
+static void menu_tree_entry_unref_and_unset_parent (MenuTreeEntry *entry);
+static void menu_tree_directory_unref_and_unset_parent (MenuTreeDirectory *directory);
/*
* The idea is that we cache the menu tree for either a given
@@ -963,13 +966,13 @@
if (--directory->refcount == 0)
{
g_slist_foreach (directory->subdirs,
- (GFunc) menu_tree_directory_unref,
+ (GFunc) menu_tree_directory_unref_and_unset_parent,
NULL);
g_slist_free (directory->subdirs);
directory->subdirs = NULL;
g_slist_foreach (directory->entries,
- (GFunc) menu_tree_entry_unref,
+ (GFunc) menu_tree_entry_unref_and_unset_parent,
NULL);
g_slist_free (directory->entries);
directory->entries = NULL;
@@ -987,6 +990,16 @@
}
}
+static void
+menu_tree_directory_unref_and_unset_parent (MenuTreeDirectory *directory)
+{
+ g_return_if_fail (directory != NULL);
+
+ directory->parent = NULL;
+
+ menu_tree_directory_unref (directory);
+}
+
static int
menu_tree_directory_compare (MenuTreeDirectory *a,
MenuTreeDirectory *b)
@@ -1016,7 +1029,7 @@
retval = g_new0 (MenuTreeEntry, 1);
- retval->parent = menu_tree_directory_ref (parent);
+ retval->parent = parent;
retval->desktop_entry = desktop_entry_ref (desktop_entry);
retval->desktop_file_id = g_strdup (desktop_file_id);
retval->refcount = 1;
@@ -1058,6 +1071,16 @@
}
}
+static void
+menu_tree_entry_unref_and_unset_parent (MenuTreeEntry *entry)
+{
+ g_return_if_fail (entry != NULL);
+
+ entry->parent = NULL;
+
+ menu_tree_entry_unref (entry);
+}
+
static int
menu_tree_entry_compare (MenuTreeEntry *a,
MenuTreeEntry *b)
@@ -2711,7 +2734,6 @@
return NULL;
}
- directory->entries = NULL;
desktop_entry_set_foreach (entries,
(DesktopEntrySetForeachFunc) entries_listify_foreach,
directory);
@@ -2756,7 +2778,7 @@
{
directory->entries = g_slist_delete_link (directory->entries,
tmp);
- menu_tree_entry_unref (entry);
+ menu_tree_entry_unref_and_unset_parent (entry);
}
tmp = next;
@@ -2789,7 +2811,7 @@
{
directory->entries = g_slist_delete_link (directory->entries,
tmp);
- menu_tree_entry_unref (entry);
+ menu_tree_entry_unref_and_unset_parent (entry);
}
tmp = next;
@@ -2811,7 +2833,7 @@
{
directory->subdirs = g_slist_delete_link (directory->subdirs,
tmp);
- menu_tree_directory_unref (subdir);
+ menu_tree_directory_unref_and_unset_parent (subdir);
}
tmp = next;
Index: gnome-menus.spec
===================================================================
RCS file: /cvs/dist/rpms/gnome-menus/devel/gnome-menus.spec,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- gnome-menus.spec 23 Mar 2005 12:24:15 -0000 1.8
+++ gnome-menus.spec 6 Apr 2005 06:50:30 -0000 1.9
@@ -4,7 +4,7 @@
Summary: A menu system for the GNOME project
Name: gnome-menus
Version: 2.10.1
-Release: 1
+Release: 2
License: LGPL
Group: System Environment/Libraries
URL: http://www.gnome.org/
@@ -12,6 +12,8 @@
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
Requires: redhat-menus >= 1.0
+Patch0: gnome-menus-2.10.1-fix-parent-references.patch
+
%description
gnome-menus is an implementation of the draft "Desktop
Menu Specification" from freedesktop.org. This package
@@ -30,6 +32,8 @@
%prep
%setup -q
+%patch0 -p1 -b .fix-parent-references
+
%build
%configure \
%if %{enable_debugging}
@@ -70,6 +74,10 @@
%changelog
+* Wed Apr 6 2005 Mark McLoughlin <markmc at redhat.com> 2.10.1-2
+- Backport patch from CVS to fix large memory leak on re-loading
+ the menus (gnome #172472)
+
* Wed Mar 23 2005 Mark McLoughlin <markmc at redhat.com> 2.10.1-1
- Update to 2.10.1
More information about the fedora-cvs-commits
mailing list