From 0cf7b310125ea283f2177d705cb134e895ff32bd Mon Sep 17 00:00:00 2001 From: Yohei Yukawa Date: Tue, 20 Mar 2018 16:28:59 -0700 Subject: Fix confusing Log.e message in SpellCheckerSession With this CL, calling SpellCheckerSession#close() multiple times will no longer show the following error message in logcat, which was quite confusing. E SpellCheckerSession: ignoring processOrEnqueueTask due to unexpected mState=TASK_CLOSE scp.mWhat=TASK_CLOSE Note that with a recent CL [1], we now more often see the above message. A typical scenario is: 1. App creates SpellCheckerSession x. 2. App calls x.close(). 3. x is garbage-collected. ART calls x.finalize(), which internally calls x.close() again. [1]: I4e00c3a2cec93d1dacff20546e481fe757279661 9b64367193ffb252f869fb9f65a60b51a654119e Bug: 72974646 Fix: 72974646 Test: Made sure that no error message in question with a test app that calls SpellCheckerSession#close() multiple times then trigger SpellCheckerSession#finalize(). Change-Id: Ie9690860e6d0406dc6746cd03c28f693e65c1dde --- core/java/android/view/textservice/SpellCheckerSession.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/java/android/view/textservice/SpellCheckerSession.java b/core/java/android/view/textservice/SpellCheckerSession.java index 779eefb14c74..886f5c822fb4 100644 --- a/core/java/android/view/textservice/SpellCheckerSession.java +++ b/core/java/android/view/textservice/SpellCheckerSession.java @@ -445,9 +445,15 @@ public class SpellCheckerSession { private void processOrEnqueueTask(SpellCheckerParams scp) { ISpellCheckerSession session; synchronized (this) { + if (scp.mWhat == TASK_CLOSE && (mState == STATE_CLOSED_AFTER_CONNECTION + || mState == STATE_CLOSED_BEFORE_CONNECTION)) { + // It is OK to call SpellCheckerSession#close() multiple times. + // Don't output confusing/misleading warning messages. + return; + } if (mState != STATE_WAIT_CONNECTION && mState != STATE_CONNECTED) { Log.e(TAG, "ignoring processOrEnqueueTask due to unexpected mState=" - + taskToString(scp.mWhat) + + stateToString(mState) + " scp.mWhat=" + taskToString(scp.mWhat)); return; } -- cgit v1.2.3-59-g8ed1b