diff options
author | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-30 02:41:13 +0000 |
---|---|---|
committer | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-30 02:41:13 +0000 |
commit | d988703400d60099a558a14352175aa7b837ad7f (patch) | |
tree | 69d6c65dac72c951ac59f247b0aaf3862dd88bd0 /content/browser/gpu | |
parent | 996bdf299766121798cd654c22690fccb7027e8a (diff) | |
download | chromium_src-d988703400d60099a558a14352175aa7b837ad7f.zip chromium_src-d988703400d60099a558a14352175aa7b837ad7f.tar.gz chromium_src-d988703400d60099a558a14352175aa7b837ad7f.tar.bz2 |
Fix potential deadlock in gpu process creation
When the GPU process crashes, the renderer compositor will try to
recreate the context. In this case, it is possible for it to try to
connect to an already invalid GpuProcessHost, where there are some
race conditions.
Make sure IPC replies to GpuProcessHost::EstablishGpuChannel and
GpuProcessHost::CreateViewCommandBuffer are always called.
BUG=235942
Review URL: https://chromiumcodereview.appspot.com/14522025
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@197235 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/gpu')
-rw-r--r-- | content/browser/gpu/gpu_process_host.cc | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc index f3f380a3..5f0c4ec 100644 --- a/content/browser/gpu/gpu_process_host.cc +++ b/content/browser/gpu/gpu_process_host.cc @@ -1183,6 +1183,13 @@ void GpuProcessHost::SendOutstandingReplies() { channel_requests_.pop(); callback.Run(IPC::ChannelHandle(), GPUInfo()); } + + while (!create_command_buffer_requests_.empty()) { + CreateCommandBufferCallback callback = + create_command_buffer_requests_.front(); + create_command_buffer_requests_.pop(); + callback.Run(MSG_ROUTING_NONE); + } } void GpuProcessHost::BlockLiveOffscreenContexts() { |