Updated Branches:
  refs/heads/master 451688a12 -> 0baf104a7

Fix a deadlock in CallbackServer.java.

-Manifested when running mobile spec. Was caused by CallbackServer
obtaining lock #1 then #2, while other thread obtained #2 then #1.


Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/commit/0baf104a
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/tree/0baf104a
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/diff/0baf104a

Branch: refs/heads/master
Commit: 0baf104a751240ac085c6e2a6eb46a1355256fea
Parents: 302d51c
Author: Andrew Grieve <agri...@chromium.org>
Authored: Tue Sep 18 13:51:31 2012 -0400
Committer: Andrew Grieve <agri...@chromium.org>
Committed: Tue Sep 18 13:51:31 2012 -0400

----------------------------------------------------------------------
 .../src/org/apache/cordova/CallbackServer.java     |   16 +++++++-------
 1 files changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/0baf104a/framework/src/org/apache/cordova/CallbackServer.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CallbackServer.java 
b/framework/src/org/apache/cordova/CallbackServer.java
index 0b8383c..dcf3b6e 100755
--- a/framework/src/org/apache/cordova/CallbackServer.java
+++ b/framework/src/org/apache/cordova/CallbackServer.java
@@ -211,14 +211,14 @@ public class CallbackServer implements Runnable {
 
                             // Wait until there is some data to send, or send 
empty data every 10 sec 
                             // to prevent XHR timeout on the client 
-                            synchronized (this) {
-                                while (this.active) {
-                                       if (jsMessageQueue != null) {
-                                               payload = 
jsMessageQueue.popAndEncode();
-                                           if (payload != null) {
-                                               break;
-                                           }
-                                       }
+                            while (this.active) {
+                               if (jsMessageQueue != null) {
+                                       payload = jsMessageQueue.popAndEncode();
+                                   if (payload != null) {
+                                       break;
+                                   }
+                               }
+                               synchronized (this) {
                                     try {
                                         this.wait(10000); // prevent timeout 
from happening
                                         //Log.d(LOG_TAG, "CallbackServer>>> 
break <<<");

Reply via email to