Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r10775 - main/trunk/pym/_emerge
Date: Wed, 25 Jun 2008 04:24:38
Message-Id: E1KBMYa-0007hK-PR@stork.gentoo.org
1 Author: zmedico
2 Date: 2008-06-25 04:24:31 +0000 (Wed, 25 Jun 2008)
3 New Revision: 10775
4
5 Modified:
6 main/trunk/pym/_emerge/__init__.py
7 Log:
8 Bug #229069 - Before deleting the depgraph, break references pointing
9 to the depgraph from Package instances in the merge list. This helps
10 reduce the heap size a lot.
11
12
13 Modified: main/trunk/pym/_emerge/__init__.py
14 ===================================================================
15 --- main/trunk/pym/_emerge/__init__.py 2008-06-24 22:55:17 UTC (rev 10774)
16 +++ main/trunk/pym/_emerge/__init__.py 2008-06-25 04:24:31 UTC (rev 10775)
17 @@ -1774,6 +1774,15 @@
18 self._cp_map = {}
19 self._cpv_map = {}
20
21 + def clear(self):
22 + """
23 + Remove all packages.
24 + """
25 + if self._cpv_map:
26 + self._clear_cache()
27 + self._cp_map.clear()
28 + self._cpv_map.clear()
29 +
30 def copy(self):
31 obj = PackageVirtualDbapi(self.settings)
32 obj._match_cache = self._match_cache.copy()
33 @@ -3840,6 +3849,29 @@
34 retlist.reverse()
35 return retlist
36
37 + def break_refs(self, mergelist):
38 + """
39 + Take a mergelist like that returned from self.altlist() and
40 + break any references that lead back to the depgraph. This is
41 + useful if you want to hold references to packages without
42 + also holding the depgraph on the heap.
43 + """
44 + for node in mergelist:
45 + if not isinstance(node, Package):
46 + continue
47 +
48 + # The visible packages cache has fullfilled it's purpose
49 + # and it's no longer needed, so free the memory.
50 + node.root_config.visible_pkgs.clear()
51 +
52 + if isinstance(node.root_config.trees["vartree"], FakeVartree):
53 + # The FakeVartree references the _package_cache which
54 + # references the depgraph. So that Package instances don't
55 + # hold the depgraph and FakeVartree on the heap, replace
56 + # the FakeVartree reference with the real vartree.
57 + node.root_config.trees["vartree"] = \
58 + self._trees_orig[node.root]["vartree"]
59 +
60 def _resolve_conflicts(self):
61 if not self._complete_graph():
62 raise self._unknown_internal_error()
63 @@ -8750,6 +8782,7 @@
64 mtimedb.filename = None
65 time.sleep(3) # allow the parent to have first fetch
66 mymergelist = mydepgraph.altlist()
67 + mydepgraph.break_refs(mymergelist)
68 del mydepgraph
69 clear_caches(trees)
70
71 @@ -8793,6 +8826,7 @@
72
73 pkglist = mydepgraph.altlist()
74 mydepgraph.saveNomergeFavorites()
75 + mydepgraph.break_refs(pkglist)
76 del mydepgraph
77 clear_caches(trees)
78
79
80 --
81 gentoo-commits@l.g.o mailing list