Index: sync/engine/backoff_delay_provider.cc |
diff --git a/sync/engine/backoff_delay_provider.cc b/sync/engine/backoff_delay_provider.cc |
index f8e2750876fd9a87d10ce49d0203efca41bef458..bff3fd61c6e1d23456d657711a548a679cf9c72c 100644 |
--- a/sync/engine/backoff_delay_provider.cc |
+++ b/sync/engine/backoff_delay_provider.cc |
@@ -97,6 +97,11 @@ TimeDelta BackoffDelayProvider::GetInitialDelay( |
return short_initial_backoff_; |
} |
+ // If a datatype decides the GetUpdates must be retried (e.g. because the |
+ // context has been updated since the request), use the short delay. |
+ if (state.last_download_updates_result == DATATYPE_TRIGGERED_RETRY) |
+ return short_initial_backoff_; |
+ |
// When the server tells us we have a conflict, then we should download the |
// latest updates so we can see the conflict ourselves, resolve it locally, |
// then try again to commit. Running another sync cycle will do all these |
@@ -105,9 +110,8 @@ TimeDelta BackoffDelayProvider::GetInitialDelay( |
// TODO(sync): We shouldn't need to handle this in BackoffDelayProvider. |
// There should be a way to deal with protocol errors before we get to this |
// point. |
- if (state.commit_result == SERVER_RETURN_CONFLICT) { |
+ if (state.commit_result == SERVER_RETURN_CONFLICT) |
return short_initial_backoff_; |
- } |
return default_initial_backoff_; |
} |