Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e5dea753 authored by Dianne Hackborn's avatar Dianne Hackborn
Browse files

Attempt to reduce problems from issue #3183612

java.lang.SecurityException: Neither user 1209 nor current...
...process has android.permission.WAKE_LOCK.

It looks like, somehow, the calling uid/pid of the SyncHandler
thread is getting corrupted.  This change has Looper check for
these values changing from their original defaults and, if there
is a problem, resetting them and logging a WTF.  Hopefully this
will avoid crashing the process, while also giving us more
helpful error reports about what is going on.

Change-Id: Iff06d575951fb8c06e2a3c31141f2907a715eb81
parent be4b39d2
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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();
            }
        }