Fix potential null error in clearEvents.

* This is follow up from previous patch to fix an unresolved
comment.

* We're still changing the clearEvents mechanic to not null the list but
actually clear the list of events. We also change when the
flush->clearEvents call happen during the destroy process so it occurs
on the handlerThread when each session does its own cleanup.

Bug: 185162720
Test: atest CtsContentCaptureServiceTestCases
Change-Id: Ide5490903deec8c4bc8aae5dc76b1fadca29dbd0
This commit is contained in:
Adam He
2021-05-06 14:31:16 -07:00
parent 782ede8ca8
commit e33b1bf4e9
2 changed files with 13 additions and 9 deletions

View File

@@ -341,11 +341,7 @@ public abstract class ContentCaptureSession implements AutoCloseable {
}
}
try {
flush(FLUSH_REASON_SESSION_FINISHED);
} finally {
onDestroy();
}
onDestroy();
}
abstract void onDestroy();

View File

@@ -263,7 +263,13 @@ public final class MainContentCaptureSession extends ContentCaptureSession {
@Override
void onDestroy() {
mHandler.removeMessages(MSG_FLUSH);
mHandler.post(() -> destroySession());
mHandler.post(() -> {
try {
flush(FLUSH_REASON_SESSION_FINISHED);
} finally {
destroySession();
}
});
}
/**
@@ -571,9 +577,11 @@ public final class MainContentCaptureSession extends ContentCaptureSession {
private ParceledListSlice<ContentCaptureEvent> clearEvents() {
// NOTE: we must save a reference to the current mEvents and then set it to to null,
// otherwise clearing it would clear it in the receiving side if the service is also local.
final List<ContentCaptureEvent> events = mEvents == null
? Collections.EMPTY_LIST
: new ArrayList<>(mEvents);
if (mEvents == null) {
return new ParceledListSlice<>(Collections.EMPTY_LIST);
}
final List<ContentCaptureEvent> events = new ArrayList<>(mEvents);
mEvents.clear();
return new ParceledListSlice<>(events);
}