Merge lp:~mvo/software-center/fix-memleak-5.2 into lp:software-center/5.2

Proposed by Michael Vogt
Status: Merged
Merged at revision: 3077
Proposed branch: lp:~mvo/software-center/fix-memleak-5.2
Merge into: lp:software-center/5.2
Diff against target: 78 lines (+24/-9)
3 files modified
softwarecenter/ui/gtk3/models/appstore2.py (+2/-1)
softwarecenter/ui/gtk3/widgets/buttons.py (+12/-4)
softwarecenter/ui/gtk3/widgets/containers.py (+10/-4)
To merge this branch: bzr merge lp:~mvo/software-center/fix-memleak-5.2
Reviewer Review Type Date Requested Status
Gary Lasker (community) Approve
Review via email: mp+123508@code.launchpad.net

Description of the change

This is a port of the memleak fix from the lp:~mvo/software-center/inspect-memleak branch for 5.2

To post a comment you must log in.
Revision history for this message
Gary Lasker (gary-lasker) wrote :

Looks quite familiar! Thank you for doing this backport, Michael. :)

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'softwarecenter/ui/gtk3/models/appstore2.py'
2--- softwarecenter/ui/gtk3/models/appstore2.py 2012-06-08 22:01:48 +0000
3+++ softwarecenter/ui/gtk3/models/appstore2.py 2012-09-10 09:12:32 +0000
4@@ -168,7 +168,8 @@
5 if doc.available is None:
6 pkgname = self.get_pkgname(doc)
7 doc.available = (
8- (pkgname in self.cache and self.cache[pkgname].candidate)
9+ (pkgname in self.cache and
10+ self.cache[pkgname].candidate is not None)
11 or self.is_purchasable(doc))
12 return doc.available
13
14
15=== modified file 'softwarecenter/ui/gtk3/widgets/buttons.py'
16--- softwarecenter/ui/gtk3/widgets/buttons.py 2012-05-17 11:33:19 +0000
17+++ softwarecenter/ui/gtk3/widgets/buttons.py 2012-09-10 09:12:32 +0000
18@@ -178,6 +178,7 @@
19 label = helper.get_appname(doc)
20 icon = helper.get_icon_at_size(doc, icon_size, icon_size)
21 stats = helper.get_review_stats(doc)
22+ self.helper = helper
23 helper.update_availability(doc)
24 helper.connect("needs-refresh", self._on_needs_refresh, doc, icon_size)
25 self.is_installed = helper.is_installed(doc)
26@@ -268,16 +269,23 @@
27 for t in [label, categories, stats_a11y, price] if t])
28 self.get_accessible().set_name(a11y_name)
29
30- backend = get_install_backend()
31- backend.connect("transaction-finished",
32- self.on_transaction_finished,
33- helper, doc)
34+ self.backend = get_install_backend()
35+ self.backend.connect("transaction-finished",
36+ self.on_transaction_finished,
37+ helper, doc)
38
39 self.connect("enter-notify-event", self.on_enter)
40 self.connect("leave-notify-event", self.on_leave)
41 self.connect("button-press-event", self.on_press)
42 self.connect("button-release-event", self.on_release)
43
44+ def destroy(self):
45+ # the disconnect the suff connected to "self" is taken care
46+ # of by this super()
47+ super(FeaturedTile, self).destroy()
48+ self.backend.disconnect_by_func(self.on_transaction_finished)
49+ self.helper.disconnect_by_func(self._on_needs_refresh)
50+
51 def _on_needs_refresh(self, helper, pkgname, doc, icon_size):
52 icon = helper.get_icon_at_size(doc, icon_size, icon_size)
53 _update_icon(self.image, icon, icon_size)
54
55=== modified file 'softwarecenter/ui/gtk3/widgets/containers.py'
56--- softwarecenter/ui/gtk3/widgets/containers.py 2012-03-19 19:45:20 +0000
57+++ softwarecenter/ui/gtk3/widgets/containers.py 2012-09-10 09:12:32 +0000
58@@ -175,10 +175,16 @@
59 self.column_spacing = value
60 self._layout_children(self.get_allocation())
61
62- def remove_all(self):
63- self._cell_size = None
64- for child in self:
65- self.remove(child)
66+ def remove_all(self, destroy=True):
67+ self._cell_size = None
68+ for child in self:
69+ self.remove(child)
70+ # meh, this should not really be necessary, but e.g. the
71+ # TileButtons have pretty high refcounts even after remove (~10)
72+ if destroy:
73+ #print child.__grefcount__
74+ child.destroy()
75+ del child
76
77
78 # first tier of caching, cache component assets from which frames are

Subscribers

People subscribed via source and target branches