Merge "NativeMessageQueue: ensure nativeDestroy success" am: 1a4ac8e6aa am: ad5979611a
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2202591 Change-Id: I7d704f54384fa14c51856a9a361f74bf539b8362 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -51,6 +51,21 @@ public:
|
|||||||
|
|
||||||
virtual int handleEvent(int fd, int events, void* data);
|
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:
|
private:
|
||||||
JNIEnv* mPollEnv;
|
JNIEnv* mPollEnv;
|
||||||
jobject mPollObj;
|
jobject mPollObj;
|
||||||
@@ -131,7 +146,8 @@ void NativeMessageQueue::setFileDescriptorEvents(int fd, int events) {
|
|||||||
if (events & CALLBACK_EVENT_OUTPUT) {
|
if (events & CALLBACK_EVENT_OUTPUT) {
|
||||||
looperEvents |= Looper::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));
|
reinterpret_cast<void*>(events));
|
||||||
} else {
|
} else {
|
||||||
mLooper->removeFd(fd);
|
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) {
|
sp<MessageQueue> android_os_MessageQueue_getMessageQueue(JNIEnv* env, jobject messageQueueObj) {
|
||||||
|
|||||||
Reference in New Issue
Block a user