summaryrefslogtreecommitdiff
path: root/core/java/android/webkit/CallbackProxy.java
diff options
context:
space:
mode:
authorYuya Aoki <yuya.aoki@sonymobile.com>2013-03-14 18:02:22 +0900
committerTakeshi Aimi <takeshi.aimi@sonymobile.com>2013-05-01 14:56:22 +0900
commitdae43b16a79a27067f032c69569868af88294220 (patch)
tree3bef840d11bf445165fe4c27f2b72c077551dc30 /core/java/android/webkit/CallbackProxy.java
parentddf7a0660c456a975b12794c54fd6681e422ef29 (diff)
Fix deadlock of WebViewCoreThread
There was a deadlock in destroy process. Investigation showed that WebViewCoreThread is waiting some callbacks but in this case WebViewCoreThread can not resume itself not to call notify method. Flow: 1. CallbackProxy.sendMessageToUiThreadSync 2. WebViewClassic.destroy() 3. CallbackProxy.blockMessages() 4. CallbackProxy.handleMessage is called via MainThread 5. The WebViewCoreThread deadlock is occured. The cases we have to call notify method are followings. OVERRIDE_URL CREATE_WINDOW SAVE_PASSWORD NOTIFY OPEN_FILE_CHOOSER JS_ALERT JS_CONFIRM JS_PROMPT JS_UNLOAD JS_TIMEOUT Change-Id: I9d95ae500bf6338d77b32b5fa15de7cff5720d0f
Diffstat (limited to 'core/java/android/webkit/CallbackProxy.java')
-rw-r--r--core/java/android/webkit/CallbackProxy.java7
1 files changed, 6 insertions, 1 deletions
diff --git a/core/java/android/webkit/CallbackProxy.java b/core/java/android/webkit/CallbackProxy.java
index a326da2ef897..c3c51030da98 100644
--- a/core/java/android/webkit/CallbackProxy.java
+++ b/core/java/android/webkit/CallbackProxy.java
@@ -305,7 +305,12 @@ class CallbackProxy extends Handler {
// in the UI thread. The WebViewClient and WebChromeClient functions
// that check for a non-null callback are ok because java ensures atomic
// 32-bit reads and writes.
- if (messagesBlocked()) return;
+ if (messagesBlocked()) {
+ synchronized (this) {
+ notify();
+ }
+ return;
+ }
switch (msg.what) {
case PAGE_STARTED:
String startedUrl = msg.getData().getString("url");