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

Commit c0ee8f48 authored by Steven Moreland's avatar Steven Moreland Committed by Automerger Merge Worker
Browse files

Merge "NativeMessageQueue: ensure nativeDestroy success" am: 1a4ac8e6 am:...

Merge "NativeMessageQueue: ensure nativeDestroy success" am: 1a4ac8e6 am: ad597961 am: 8d8831bb

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2202591



Change-Id: Ica38f9f88f1b5f2412df0cfac5873bd2a0376eba
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents ceecf64c 8d8831bb
Loading
Loading
Loading
Loading
+35 −1
Original line number Diff line number Diff line
@@ -51,6 +51,21 @@ public:

    virtual int handleEvent(int fd, int events, void* data);

    /**
     * A simple proxy that holds a weak reference to a looper callback.
     */
    class WeakLooperCallback : public LooperCallback {
    protected:
        virtual ~WeakLooperCallback();

    public:
        WeakLooperCallback(const wp<LooperCallback>& callback);
        virtual int handleEvent(int fd, int events, void* data);

    private:
        wp<LooperCallback> mCallback;
    };

private:
    JNIEnv* mPollEnv;
    jobject mPollObj;
@@ -131,7 +146,8 @@ void NativeMessageQueue::setFileDescriptorEvents(int fd, int events) {
        if (events & CALLBACK_EVENT_OUTPUT) {
            looperEvents |= Looper::EVENT_OUTPUT;
        }
        mLooper->addFd(fd, Looper::POLL_CALLBACK, looperEvents, this,
        mLooper->addFd(fd, Looper::POLL_CALLBACK, looperEvents,
                sp<WeakLooperCallback>::make(this),
                reinterpret_cast<void*>(events));
    } else {
        mLooper->removeFd(fd);
@@ -162,6 +178,24 @@ int NativeMessageQueue::handleEvent(int fd, int looperEvents, void* data) {
}


// --- NativeMessageQueue::WeakLooperCallback ---

NativeMessageQueue::WeakLooperCallback::WeakLooperCallback(const wp<LooperCallback>& callback) :
        mCallback(callback) {
}

NativeMessageQueue::WeakLooperCallback::~WeakLooperCallback() {
}

int NativeMessageQueue::WeakLooperCallback::handleEvent(int fd, int events, void* data) {
    sp<LooperCallback> callback = mCallback.promote();
    if (callback != nullptr) {
        return callback->handleEvent(fd, events, data);
    }
    return 0;
}


// ----------------------------------------------------------------------------

sp<MessageQueue> android_os_MessageQueue_getMessageQueue(JNIEnv* env, jobject messageQueueObj) {