diff options
author | Hidehiko Tsuchiya <hidehiko.xa.tsuchiya@sonymobile.com> | 2018-01-18 13:50:55 +0900 |
---|---|---|
committer | Shunta Sato <shunta.sato@sony.com> | 2018-02-27 15:27:11 +0900 |
commit | 17d6768ee516abccc69ce8a1eff99b9ed6eed27e (patch) | |
tree | 6cc0bf935ddd4389af58bee0b889d00c3c5851d1 /packages/StatementService/src/com/android/statementservice/DirectStatementService.java | |
parent | 2aed62d6645879de71050995acd5dbc5b377c6ec (diff) |
Defer deleting a http cache
Symptom:
StatementService was crashed due to the exception;
"java.lang.IllegalStateException: cache is closed"
Root cause:
The http cache is deleted at DirectStatementService#onDestroy
in main thread. If a worker thread is still alive and it tries to
access the cache, it fails with IllegalStateException.
Solution:
The request of deleting a cache was moved from the main thread to
worker. Now, the cache can be deleted safely.
Bug: 73911877
Change-Id: I61f4e62b00e35f4a272ef983758e61ef3bf2d180
Diffstat (limited to 'packages/StatementService/src/com/android/statementservice/DirectStatementService.java')
-rw-r--r-- | packages/StatementService/src/com/android/statementservice/DirectStatementService.java | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/packages/StatementService/src/com/android/statementservice/DirectStatementService.java b/packages/StatementService/src/com/android/statementservice/DirectStatementService.java index 449738e9c605..659696e0e212 100644 --- a/packages/StatementService/src/com/android/statementservice/DirectStatementService.java +++ b/packages/StatementService/src/com/android/statementservice/DirectStatementService.java @@ -155,17 +155,20 @@ public final class DirectStatementService extends Service { @Override public void onDestroy() { super.onDestroy(); - if (mThread != null) { - mThread.quit(); - } - - try { - if (mHttpResponseCache != null) { - mHttpResponseCache.delete(); + final HttpResponseCache responseCache = mHttpResponseCache; + mHandler.post(new Runnable() { + public void run() { + try { + if (responseCache != null) { + responseCache.delete(); + } + } catch (IOException e) { + Log.i(TAG, "HTTP(S) response cache deletion failed:" + e); + } + Looper.myLooper().quit(); } - } catch (IOException e) { - Log.i(TAG, "HTTP(S) response cache deletion failed:" + e); - } + }); + mHttpResponseCache = null; } @Override |