Index: content/common/gpu/client/context_provider_command_buffer.cc |
diff --git a/content/common/gpu/client/context_provider_command_buffer.cc b/content/common/gpu/client/context_provider_command_buffer.cc |
index ba9f0ebfbed6a6f75196c29a7bf89da933557773..5379e5bd6044aaedb530a44c9a215e68379ec1f5 100644 |
--- a/content/common/gpu/client/context_provider_command_buffer.cc |
+++ b/content/common/gpu/client/context_provider_command_buffer.cc |
@@ -109,6 +109,12 @@ bool ContextProviderCommandBuffer::BindToCurrentThread() { |
} |
void ContextProviderCommandBuffer::DetachFromThread() { |
+ DCHECK(context3d_); |
+ // Invalidate any weak pointers used by the context3d_ to ensure that it's |
+ // safe to use and destroy it on a different thread. There's no guarantee |
+ // that callbacks such as ContextLost will be delivered after this has been |
danakj
2015/09/03 18:09:58
Can you add this to the ContextProvider::DetachFro
|
+ // called. |
+ context3d_->InvalidateWeakPtrsOnCurrentThread(); |
context_thread_checker_.DetachFromThread(); |
} |
@@ -182,7 +188,9 @@ void ContextProviderCommandBuffer::DeleteCachedResources() { |
} |
void ContextProviderCommandBuffer::OnLostContext() { |
- DCHECK(context_thread_checker_.CalledOnValidThread()); |
+ // Note: no thread check here as this should not change the thread for which |
+ // this context is currently bound. e.g. a worker context might be unbound |
+ // and this should not result in it being bound to the current thread. |
{ |
base::AutoLock lock(main_thread_lock_); |
if (destroyed_) |
@@ -197,8 +205,9 @@ void ContextProviderCommandBuffer::OnLostContext() { |
void ContextProviderCommandBuffer::OnMemoryAllocationChanged( |
const gpu::MemoryAllocation& allocation) { |
- DCHECK(context_thread_checker_.CalledOnValidThread()); |
- |
+ // Note: no thread check here as this should not change the thread for which |
+ // this context is currently bound. e.g. a worker context might be unbound |
+ // and this should not result in it being bound to the current thread. |
if (memory_policy_changed_callback_.is_null()) |
return; |