summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/Scheduler.py
diff options
context:
space:
mode:
Diffstat (limited to 'pym/_emerge/Scheduler.py')
-rw-r--r--pym/_emerge/Scheduler.py24
1 files changed, 7 insertions, 17 deletions
diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py
index 9215678bb..7d34d706a 100644
--- a/pym/_emerge/Scheduler.py
+++ b/pym/_emerge/Scheduler.py
@@ -317,10 +317,6 @@ class Scheduler(PollScheduler):
Initialization structures used for dependency calculations
involving currently installed packages.
"""
- # TODO: Replace the BlockerDB with a depgraph of installed packages
- # that's updated incrementally with each upgrade/uninstall operation
- # This will be useful for making quick and safe decisions with respect
- # to aggressive parallelization discussed in bug #279623.
self._set_graph_config(graph_config)
self._blocker_db = {}
for root in self.trees:
@@ -329,6 +325,7 @@ class Scheduler(PollScheduler):
pkg_cache=self._pkg_cache)
else:
fake_vartree = graph_config.trees[root]['vartree']
+ fake_vartree.sync()
self._blocker_db[root] = BlockerDB(fake_vartree)
def _destroy_graph(self):
@@ -643,27 +640,20 @@ class Scheduler(PollScheduler):
def _find_blockers(self, new_pkg):
"""
- Returns a callable which should be called only when
- the vdb lock has been acquired.
+ Returns a callable.
"""
def get_blockers():
- return self._find_blockers_with_lock(new_pkg, acquire_lock=0)
+ return self._find_blockers_impl(new_pkg)
return get_blockers
- def _find_blockers_with_lock(self, new_pkg, acquire_lock=0):
+ def _find_blockers_impl(self, new_pkg):
if self._opts_ignore_blockers.intersection(self.myopts):
return None
- # Call gc.collect() here to avoid heap overflow that
- # triggers 'Cannot allocate memory' errors (reported
- # with python-2.5).
- gc.collect()
-
blocker_db = self._blocker_db[new_pkg.root]
blocker_dblinks = []
- for blocking_pkg in blocker_db.findInstalledBlockers(
- new_pkg, acquire_lock=acquire_lock):
+ for blocking_pkg in blocker_db.findInstalledBlockers(new_pkg):
if new_pkg.slot_atom == blocking_pkg.slot_atom:
continue
if new_pkg.cpv == blocking_pkg.cpv:
@@ -673,8 +663,6 @@ class Scheduler(PollScheduler):
self.pkgsettings[blocking_pkg.root], treetype="vartree",
vartree=self.trees[blocking_pkg.root]["vartree"]))
- gc.collect()
-
return blocker_dblinks
def _dblink_pkg(self, pkg_dblink):
@@ -1529,6 +1517,8 @@ class Scheduler(PollScheduler):
self._completed_tasks.add(pkg)
self._unsatisfied_system_deps.discard(pkg)
self._choose_pkg_return_early = False
+ blocker_db = self._blocker_db[pkg.root]
+ blocker_db.discardBlocker(pkg)
def _merge(self):