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

Commit 8fa56f60 authored by Michael Wright's avatar Michael Wright
Browse files

Lock when obtaining the current monitor name.

Also, remove some dead code.

Change-Id: I0e65671f9ca43addd8fc44dcd878bcff2f588e42
parent ef17e871
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>();