Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e33b1bf4 authored by Adam He's avatar Adam He
Browse files

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
parent 782ede8c
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -341,12 +341,8 @@ public abstract class ContentCaptureSession implements AutoCloseable {
            }
        }

        try {
            flush(FLUSH_REASON_SESSION_FINISHED);
        } finally {
        onDestroy();
    }
    }

    abstract void onDestroy();

+12 −4
Original line number Diff line number Diff line
@@ -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);
    }