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
      9b64367193

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
This commit is contained in:
Yohei Yukawa
2018-03-20 16:28:59 -07:00
parent 3785417848
commit 0cf7b31012

View File

@@ -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;
}