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

Commit 75e181dd authored by Michael Wright's avatar Michael Wright Committed by Android (Google) Code Review
Browse files

Merge "Lock when obtaining the current monitor name." into jb-mr2-dev

parents 03073519 8fa56f60
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -88,7 +88,6 @@ public class Watchdog extends Thread {
    AlarmManagerService mAlarm;
    ActivityManagerService mActivity;
    boolean mCompleted;
    boolean mForceKillSystem;
    Monitor mCurrentMonitor;

    int mPhonePid;
@@ -135,7 +134,9 @@ public class Watchdog extends Thread {

                    final int size = mMonitors.size();
                    for (int i = 0 ; i < size ; i++) {
                        synchronized (Watchdog.this) {
                            mCurrentMonitor = mMonitors.get(i);
                        }
                        mCurrentMonitor.monitor();
                    }

@@ -388,6 +389,8 @@ public class Watchdog extends Thread {
            mCompleted = false;
            mHandler.sendEmptyMessage(MONITOR);


            final String name;
            synchronized (this) {
                long timeout = TIME_TO_WAIT;

@@ -396,16 +399,16 @@ public class Watchdog extends Thread {
                // to timeout on is asleep as well and won't have a chance to run, causing a false
                // positive on when to kill things.
                long start = SystemClock.uptimeMillis();
                while (timeout > 0 && !mForceKillSystem) {
                while (timeout > 0) {
                    try {
                        wait(timeout);  // notifyAll() is called when mForceKillSystem is set
                        wait(timeout);
                    } catch (InterruptedException e) {
                        Log.wtf(TAG, e);
                    }
                    timeout = TIME_TO_WAIT - (SystemClock.uptimeMillis() - start);
                }

                if (mCompleted && !mForceKillSystem) {
                if (mCompleted) {
                    // The monitors have returned.
                    waitedHalf = false;
                    continue;
@@ -421,14 +424,14 @@ public class Watchdog extends Thread {
                    waitedHalf = true;
                    continue;
                }

                name = (mCurrentMonitor != null) ?
                    mCurrentMonitor.getClass().getName() : "null";
            }

            // If we got here, that means that the system is most likely hung.
            // First collect stack traces from all threads of the system process.
            // Then kill this process so that the system will restart.

            final String name = (mCurrentMonitor != null) ?
                    mCurrentMonitor.getClass().getName() : "null";
            EventLog.writeEvent(EventLogTags.WATCHDOG, name);

            ArrayList<Integer> pids = new ArrayList<Integer>();