Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(445)

Unified Diff: pkg/analyzer/lib/src/task/driver.dart

Issue 2050573003: Issue 26629. Detect cache inconsistency in GetContentTask. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analyzer/lib/src/task/driver.dart
diff --git a/pkg/analyzer/lib/src/task/driver.dart b/pkg/analyzer/lib/src/task/driver.dart
index 70ebe3ba5a5e3d01c063baacdb98099b111ebef2..c17bec64c3776e17d0d8ed90335ab5243199ae82 100644
--- a/pkg/analyzer/lib/src/task/driver.dart
+++ b/pkg/analyzer/lib/src/task/driver.dart
@@ -101,15 +101,18 @@ class AnalysisDriver {
try {
isTaskRunning = true;
AnalysisTask task;
- WorkOrder workOrder = createWorkOrderForResult(target, result);
- if (workOrder != null) {
- while (workOrder.moveNext()) {
-// AnalysisTask previousTask = task;
-// String message = workOrder.current.toString();
- task = performWorkItem(workOrder.current);
-// if (task == null) {
-// throw new AnalysisException(message, previousTask.caughtException);
-// }
+ while (true) {
+ try {
+ WorkOrder workOrder = createWorkOrderForResult(target, result);
+ if (workOrder != null) {
+ while (workOrder.moveNext()) {
+ task = performWorkItem(workOrder.current);
+ }
+ }
+ break;
+ } on ModificationTimeMismatchError {
+ // Cache inconsistency was detected and fixed by invalidating
+ // corresponding results in cache. Computation must be restarted.
}
}
return task;
@@ -248,7 +251,12 @@ class AnalysisDriver {
if (currentWorkOrder == null) {
currentWorkOrder = createNextWorkOrder();
} else if (currentWorkOrder.moveNext()) {
- performWorkItem(currentWorkOrder.current);
+ try {
+ performWorkItem(currentWorkOrder.current);
+ } on ModificationTimeMismatchError {
+ reset();
+ return true;
+ }
} else {
currentWorkOrder = createNextWorkOrder();
}

Powered by Google App Engine
This is Rietveld 408576698