| Index: sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart | 
| diff --git a/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart b/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart | 
| index a5e3e3c5b4ea4a8df3dc16dc121b7e7146601af5..73af43e78e533b4ac3bf042deb868f12972b5ffa 100644 | 
| --- a/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart | 
| +++ b/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart | 
| @@ -168,7 +168,7 @@ class BacktrackingSolver { | 
| /// version of it. If there are no more versions, continues to backtrack to | 
| /// previous selections, and so on. If there is nothing left to backtrack to, | 
| /// completes to the last failure that occurred. | 
| -  Future<List<PackageId>> _traverseSolution() { | 
| +  Future<List<PackageId>> _traverseSolution() => resetStack(() { | 
| return new Traverser(this).traverse().catchError((error) { | 
| if (error is! SolveFailure) throw error; | 
|  | 
| @@ -180,7 +180,7 @@ class BacktrackingSolver { | 
| // All out of solutions, so fail. | 
| throw error; | 
| }); | 
| -  } | 
| +  }); | 
|  | 
| /// Backtracks from the current failed solution and determines the next | 
| /// solution to try. If possible, it will backjump based on the cause of the | 
| @@ -408,9 +408,7 @@ class Traverser { | 
| // Move onto the next package if we've traversed all of these references. | 
| if (refs.isEmpty) return _traversePackage(); | 
|  | 
| -    // Pump the event loop to flatten the stack trace and workaround #9583. | 
| -    // If that bug is fixed, this can be Future.sync() instead. | 
| -    return new Future(() { | 
| +    return resetStack(() { | 
| var ref = refs.removeFirst(); | 
|  | 
| _validateDependency(ref, depender); | 
|  |