Chromium Code Reviews| Index: pym/_emerge/Scheduler.py |
| diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py |
| index fa4825cf2058bbbe24ba4690a61a95a332315b32..e4b6926c3a110150d824b42fdd2f5a812b39196d 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() |
|
diandersAtChromium
2011/03/22 02:57:59
How did you decide this was the place to put the s
davidjames
2011/03/23 20:19:11
Exactly right.
|
| 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. |
|
diandersAtChromium
2011/03/22 02:57:59
...that will find the blockers for the given packa
davidjames
2011/03/23 20:19:11
Done.
|
| """ |
| 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 |
|
diandersAtChromium
2011/03/22 02:57:59
Are you sure that the gc.collect() is no longer ne
davidjames
2011/03/23 20:19:11
This gc.collect() call was only needed to workarou
|
| - # 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): |
| @@ -1527,6 +1515,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): |