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
This commit is contained in:
Hidehiko Tsuchiya
2018-01-18 13:50:55 +09:00
committed by Shunta Sato
parent 2aed62d664
commit 17d6768ee5

View File

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