Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index 49dae1d6ae988284713422c430f0f1e8a2f814e8..42eda06e3e5863520b709e78d1df3256e52dc008 100644 |
--- a/cc/resources/resource_provider.cc |
+++ b/cc/resources/resource_provider.cc |
@@ -1101,6 +1101,7 @@ ResourceProvider::ScopedWriteLockGL::ScopedWriteLockGL( |
bool create_mailbox) |
: resource_provider_(resource_provider), |
resource_id_(resource_id), |
+ has_sync_token_(false), |
synchronized_(false) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
Resource* resource = resource_provider->LockForWrite(resource_id); |
@@ -1123,7 +1124,10 @@ ResourceProvider::ScopedWriteLockGL::~ScopedWriteLockGL() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
Resource* resource = resource_provider_->GetResource(resource_id_); |
DCHECK(resource->locked_for_write); |
- if (sync_token_.HasData()) |
+ // It's not sufficient to check sync_token_.HasData() here because the sync |
+ // might be null because of context loss. Even in that case we want to set the |
+ // sync token because it's checked in PrepareSendToParent while drawing. |
+ if (has_sync_token_) |
resource->UpdateSyncToken(sync_token_); |
if (synchronized_) |
resource->SetSynchronized(); |