diff options
author | Simon Wilson <simonwilson@google.com> | 2011-03-02 18:03:52 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-03-02 18:03:52 -0800 |
commit | edc68a001cd94d2011029004cb27231432a18575 (patch) | |
tree | 11804661f3dd232ca35849445f2e7c820bb786b1 | |
parent | 1110748b2df664f9c5066819c1f0616eae3394a7 (diff) | |
parent | e5dea7537cadbf79614730f96d9e92cc2b12ad5a (diff) | |
download | frameworks_base-edc68a001cd94d2011029004cb27231432a18575.zip frameworks_base-edc68a001cd94d2011029004cb27231432a18575.tar.gz frameworks_base-edc68a001cd94d2011029004cb27231432a18575.tar.bz2 |
Merge "Attempt to reduce problems from issue #3183612" into gingerbread
-rw-r--r-- | core/java/android/os/Looper.java | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/core/java/android/os/Looper.java b/core/java/android/os/Looper.java index d360140..994c242 100644 --- a/core/java/android/os/Looper.java +++ b/core/java/android/os/Looper.java @@ -17,6 +17,7 @@ package android.os; import android.util.Config; +import android.util.Log; import android.util.Printer; /** @@ -106,6 +107,12 @@ public class Looper { public static final void loop() { Looper me = myLooper(); MessageQueue queue = me.mQueue; + + // Make sure the identity of this thread is that of the local process, + // and keep track of what that identity token actually is. + Binder.clearCallingIdentity(); + final long ident = Binder.clearCallingIdentity(); + while (true) { Message msg = queue.next(); // might block //if (!me.mRun) { @@ -124,6 +131,17 @@ public class Looper { if (me.mLogging!= null) me.mLogging.println( "<<<<< Finished to " + msg.target + " " + msg.callback); + + // Make sure that during the course of dispatching the + // identity of the thread wasn't corrupted. + final long newIdent = Binder.clearCallingIdentity(); + if (ident != newIdent) { + Log.wtf("Looper", "Thread identity changed from 0x" + + Long.toHexString(ident) + " to 0x" + + Long.toHexString(newIdent) + " while dispatching to " + + msg.target + " " + msg.callback + " what=" + msg.what); + } + msg.recycle(); } } |