summaryrefslogtreecommitdiffstats
path: root/content/renderer/gpu
diff options
context:
space:
mode:
authorsievers@chromium.org <sievers@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-20 02:00:46 +0000
committersievers@chromium.org <sievers@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-20 02:00:46 +0000
commit8c66d2b08876fecef826393836d5e69b2bed9211 (patch)
tree98e65fc8c5768de7e2b254a7138c4665a13d5798 /content/renderer/gpu
parent0827a444ff0040e844e3841f717761517e47f77f (diff)
downloadchromium_src-8c66d2b08876fecef826393836d5e69b2bed9211.zip
chromium_src-8c66d2b08876fecef826393836d5e69b2bed9211.tar.gz
chromium_src-8c66d2b08876fecef826393836d5e69b2bed9211.tar.bz2
Fix a potential race in OnSwapBuffersComplete().
It seems to be possible that we delete (and recreate) the graphics context from WebGraphicsContext3DCommandBufferImpl::OnSwapBuffersComplete() calling renderview->OnViewContextSwapBuffersComplete(). This seems to be possible if the updated state already contains a cmdbuffer error while the context did not receive OnContextLost yet. BUG=110115 Review URL: https://chromiumcodereview.appspot.com/9159026 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@118392 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer/gpu')
-rw-r--r--content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.cc b/content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.cc
index 5611945..2f3b51f 100644
--- a/content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.cc
+++ b/content/renderer/gpu/webgraphicscontext3d_command_buffer_impl.cc
@@ -21,6 +21,7 @@
#include "base/command_line.h"
#include "base/debug/trace_event.h"
#include "base/logging.h"
+#include "base/message_loop.h"
#include "base/metrics/histogram.h"
#include "base/synchronization/lock.h"
#include "content/common/child_process.h"
@@ -1134,8 +1135,12 @@ void WebGraphicsContext3DCommandBufferImpl::OnSwapBuffersComplete() {
// This may be called after tear-down of the RenderView.
RenderViewImpl* renderview =
web_view_ ? RenderViewImpl::FromWebView(web_view_) : NULL;
- if (renderview)
- renderview->OnViewContextSwapBuffersComplete();
+ if (renderview) {
+ MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&RenderViewImpl::OnViewContextSwapBuffersComplete,
+ renderview));
+ }
if (swapbuffers_complete_callback_)
swapbuffers_complete_callback_->onSwapBuffersComplete();