diff options
| author | Yuya Aoki <yuya.aoki@sonymobile.com> | 2013-03-14 18:02:22 +0900 |
|---|---|---|
| committer | Takeshi Aimi <takeshi.aimi@sonymobile.com> | 2013-05-01 14:56:22 +0900 |
| commit | dae43b16a79a27067f032c69569868af88294220 (patch) | |
| tree | 3bef840d11bf445165fe4c27f2b72c077551dc30 /core/java/android/webkit/CallbackProxy.java | |
| parent | ddf7a0660c456a975b12794c54fd6681e422ef29 (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.java | 7 |
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"); |
