diff options
author | Jaikumar Ganesh <jaikumar@google.com> | 2011-11-29 10:05:13 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-11-29 10:05:13 -0800 |
commit | ff33b94e236fcde3833fba698d32d0e6b98fa303 (patch) | |
tree | e97c5e6817037594bc36794bd225d980658a2d9c /core | |
parent | 10232fe63916d03d147d0a07f8bf4d70cb60941c (diff) | |
parent | 6f9a61651e7949a5d63a4b44314d435c0105a51f (diff) | |
download | frameworks_base-ff33b94e236fcde3833fba698d32d0e6b98fa303.zip frameworks_base-ff33b94e236fcde3833fba698d32d0e6b98fa303.tar.gz frameworks_base-ff33b94e236fcde3833fba698d32d0e6b98fa303.tar.bz2 |
Merge "Cleanup static references when quitting." into ics-mr1
Diffstat (limited to 'core')
-rw-r--r-- | core/java/com/android/internal/util/StateMachine.java | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/core/java/com/android/internal/util/StateMachine.java b/core/java/com/android/internal/util/StateMachine.java index 36f0246..72489a2 100644 --- a/core/java/com/android/internal/util/StateMachine.java +++ b/core/java/com/android/internal/util/StateMachine.java @@ -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 @@ -569,6 +569,13 @@ public class StateMachine { } /** + * 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 * large null is returned. @@ -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 @@ -803,6 +804,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. */ private final void completeConstruction() { |