summaryrefslogtreecommitdiffstats
path: root/content/browser/gpu
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-30 02:41:13 +0000
committerboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-30 02:41:13 +0000
commitd988703400d60099a558a14352175aa7b837ad7f (patch)
tree69d6c65dac72c951ac59f247b0aaf3862dd88bd0 /content/browser/gpu
parent996bdf299766121798cd654c22690fccb7027e8a (diff)
downloadchromium_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.cc7
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() {