diff options
author | Wink Saville <wink@google.com> | 2013-04-16 20:32:59 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-04-16 20:33:00 +0000 |
commit | c6f2d17a0a6f9b172ff91247db12bc39a601f81c (patch) | |
tree | f9f41c247e77f32fec4aef1e72c68c2bc429b124 /core | |
parent | 37f58dccecd778f5af1f1f1db492c75ec5fcabd6 (diff) | |
parent | 03812c7894bd51ffc27aece5933791e4a00d679b (diff) | |
download | frameworks_base-c6f2d17a0a6f9b172ff91247db12bc39a601f81c.zip frameworks_base-c6f2d17a0a6f9b172ff91247db12bc39a601f81c.tar.gz frameworks_base-c6f2d17a0a6f9b172ff91247db12bc39a601f81c.tar.bz2 |
Merge "Add mHasQuit to fix an NPE in StateMachine." into jb-mr2-dev
Diffstat (limited to 'core')
-rw-r--r-- | core/java/com/android/internal/util/StateMachine.java | 50 |
1 files changed, 28 insertions, 22 deletions
diff --git a/core/java/com/android/internal/util/StateMachine.java b/core/java/com/android/internal/util/StateMachine.java index dd57ef4..d26f79e 100644 --- a/core/java/com/android/internal/util/StateMachine.java +++ b/core/java/com/android/internal/util/StateMachine.java @@ -672,6 +672,9 @@ public class StateMachine { private static class SmHandler extends Handler { + /** true if StateMachine has quit */ + private boolean mHasQuit = false; + /** The debug flag */ private boolean mDbg = false; @@ -773,29 +776,31 @@ public class StateMachine { */ @Override public final void handleMessage(Message msg) { - if (mDbg) mSm.log("handleMessage: E msg.what=" + msg.what); - - /** Save the current message */ - mMsg = msg; - - /** State that processed the message */ - State msgProcessedState = null; - if (mIsConstructionCompleted) { - /** Normal path */ - msgProcessedState = processMsg(msg); - } else if (!mIsConstructionCompleted && (mMsg.what == SM_INIT_CMD) - && (mMsg.obj == mSmHandlerObj)) { - /** Initial one time path. */ - mIsConstructionCompleted = true; - invokeEnterMethods(0); - } else { - throw new RuntimeException("StateMachine.handleMessage: " - + "The start method not called, received msg: " + msg); - } - performTransitions(msgProcessedState, msg); + if (!mHasQuit) { + if (mDbg) mSm.log("handleMessage: E msg.what=" + msg.what); + + /** Save the current message */ + mMsg = msg; + + /** State that processed the message */ + State msgProcessedState = null; + if (mIsConstructionCompleted) { + /** Normal path */ + msgProcessedState = processMsg(msg); + } else if (!mIsConstructionCompleted && (mMsg.what == SM_INIT_CMD) + && (mMsg.obj == mSmHandlerObj)) { + /** Initial one time path. */ + mIsConstructionCompleted = true; + invokeEnterMethods(0); + } else { + throw new RuntimeException("StateMachine.handleMessage: " + + "The start method not called, received msg: " + msg); + } + performTransitions(msgProcessedState, msg); - // We need to check if mSm == null here as we could be quitting. - if (mDbg && mSm != null) mSm.log("handleMessage: X"); + // We need to check if mSm == null here as we could be quitting. + if (mDbg && mSm != null) mSm.log("handleMessage: X"); + } } /** @@ -908,6 +913,7 @@ public class StateMachine { mInitialState = null; mDestState = null; mDeferredMessages.clear(); + mHasQuit = true; } /** |