The want_restart_for_use_change function it overly eager to trigger backtracking in some cases where there are USE dependencies in the graph. The problem is right here, where want_restart_for_use_change returns True for any overlapping USE dependencies, even though those USE dependencies may be satisfied with the changes: new_use, changes = self._dynamic_config._needed_use_config_changes.get(pkg) for ppkg, atom in parent_atoms: if not atom.use or \ not any(x in atom.use.required for x in changes): continue else: return True I discovered this issue while working on GLEP 73 support (bug 628004), since autounmask USE changes make trigger REQUIRED_USE changes, and we want to avoid backtracking here whenever possible.
Patch posted for review: https://archives.gentoo.org/gentoo-portage-dev/message/9a623ecbaac654ee389004d3da80f6a5 https://github.com/gentoo/portage/pull/212
This is in the master branch: https://gitweb.gentoo.org/proj/portage.git/commit/?id=d39e0532674d78436e78c035143163001dbb198f
Released in 2.3.11.