summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-24 19:11:56 +0000
committerananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-24 19:11:56 +0000
commit7ef2e9d25fa0e7fbdc71def514da476f5756751b (patch)
treee472d3b2a07ae6aacb13a6aeadfc2df2ad65fbee /chrome
parent0a172f93017ec848b00e3e83d7bc64effc6114e4 (diff)
downloadchromium_src-7ef2e9d25fa0e7fbdc71def514da476f5756751b.zip
chromium_src-7ef2e9d25fa0e7fbdc71def514da476f5756751b.tar.gz
chromium_src-7ef2e9d25fa0e7fbdc71def514da476f5756751b.tar.bz2
Don't reenter Webkit, while it waits for outgoing sync calls to complete. This
fixes bug http://code.google.com/p/chromium/issues/detail?id=4582, which is a crash in the renderer process, which occurs when the renderer receives a sync message requesting accessibility information from the browser, while it waits for the PluginDestroyed sync call to unwind. The ViewMsg_GetAccessibilityInfo has a timeout associated with it, which indicates that it is ok for the call to fail. We now turn off the unblock flag on the sync message which will ensure that it does not reenter Webkit in this scenario. R=jcampan Bug=4582 Review URL: http://codereview.chromium.org/12402 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@5927 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/browser_accessibility_manager.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/chrome/browser/browser_accessibility_manager.cc b/chrome/browser/browser_accessibility_manager.cc
index 51b7654..a825995 100644
--- a/chrome/browser/browser_accessibility_manager.cc
+++ b/chrome/browser/browser_accessibility_manager.cc
@@ -108,6 +108,10 @@ bool BrowserAccessibilityManager::RequestAccessibilityInfo(
members->render_widget_host_->process()->channel()) {
// Necessary for the send to keep the UI responsive.
msg->EnableMessagePumping();
+ // By default sync calls are unblocking, i.e if the receiver is an outgoing
+ // sync call, it will process received sync calls. Webkit is not reentrant.
+ // We don't want to reenter Webkit if it is in an outgoing sync call.
+ msg->set_unblock(false);
success = members->render_widget_host_->process()->channel()->
SendWithTimeout(msg, kAccessibilityMessageTimeOut);
}