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

Commit 6f9a6165 authored by Jaikumar Ganesh's avatar Jaikumar Ganesh
Browse files

Cleanup static references when quitting.

The State machine was leaking references when it was
getting created and destroyed.

Change-Id: I7904baf0482eef1617071d159d7b283566b4095c
parent 500afb87
Loading
Loading
Loading
Loading
+34 −10
Original line number Diff line number Diff line
@@ -418,7 +418,7 @@ public class StateMachine {
    public static final int SM_QUIT_CMD = -1;

    /** Message.what value when initializing */
    public static final int SM_INIT_CMD = -1;
    public static final int SM_INIT_CMD = -2;

    /**
     * Convenience constant that maybe returned by processMessage
@@ -568,6 +568,13 @@ public class StateMachine {
            return mCount;
        }

        /**
         * Clear the list of Processed Message Info.
         */
        void cleanup() {
            mMessages.clear();
        }

        /**
         * @return the information on a particular record. 0 is the oldest
         * record and size()-1 is the newest record. If the index is to
@@ -608,6 +615,7 @@ public class StateMachine {
        }
    }


    private static class SmHandler extends Handler {

        /** The debug flag */
@@ -782,15 +790,8 @@ public class StateMachine {
             */
            if (destState != null) {
                if (destState == mQuittingState) {
                    /**
                     * We are quitting so ignore all messages.
                     */
                    mSm.quitting();
                    if (mSm.mSmThread != null) {
                        // If we made the thread then quit looper which stops the thread.
                        getLooper().quit();
                        mSm.mSmThread = null;
                    }
                    cleanupAfterQuitting();

                } else if (destState == mHaltingState) {
                    /**
                     * Call halting() if we've transitioned to the halting
@@ -802,6 +803,29 @@ public class StateMachine {
            }
        }

        /**
         * Cleanup all the static variables and the looper after the SM has been quit.
         */
        private final void cleanupAfterQuitting() {
            mSm.quitting();
            if (mSm.mSmThread != null) {
                // If we made the thread then quit looper which stops the thread.
                getLooper().quit();
                mSm.mSmThread = null;
            }

            mSm.mSmHandler = null;
            mSm = null;
            mMsg = null;
            mProcessedMessages.cleanup();
            mStateStack = null;
            mTempStateStack = null;
            mStateInfo.clear();
            mInitialState = null;
            mDestState = null;
            mDeferredMessages.clear();
        }

        /**
         * Complete the construction of the state machine.
         */