Index: content/renderer/render_widget.cc |
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
index a071d1477ad0e8e6c6e6962b95285a313368c79f..69e5fe5aa0b2a14a8c388f4ca6c40de4ddded4bb 100644 |
--- a/content/renderer/render_widget.cc |
+++ b/content/renderer/render_widget.cc |
@@ -1022,10 +1022,15 @@ scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) { |
worker_context_provider = ContextProviderCommandBuffer::Create( |
CreateGraphicsContext3D(false), RENDER_WORKER_CONTEXT); |
- if (!worker_context_provider.get()) { |
+ if (!worker_context_provider.get() || |
+ !worker_context_provider->BindToCurrentThread()) { |
// Cause the compositor to wait and try again. |
return scoped_ptr<cc::OutputSurface>(); |
} |
+ worker_context_provider->SetupLock(); |
+ // Detach from thread to allow context to be destroyed on a different |
+ // thread without being used. |
+ worker_context_provider->DetachFromThread(); |
} |
uint32 output_surface_id = next_output_surface_id_++; |