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):
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:
This is in the master branch:
Released in 2.3.11.