mirror of
https://github.com/MetaCubeX/ClashMetaForAndroid.git
synced 2026-05-09 18:11:26 +08:00
unregister handler before delete global reference
This commit is contained in:
@@ -7,6 +7,8 @@ static std::pair<jobject, uint64_t> completableFutureWithToken(Master::Context *
|
|||||||
jobject completableFuture = context->newGlobalReference(context->newCompletableFuture());
|
jobject completableFuture = context->newGlobalReference(context->newCompletableFuture());
|
||||||
|
|
||||||
EventQueue::getInstance()->registerHandler(COMPLETE, token, [completableFuture](const event_t *event) {
|
EventQueue::getInstance()->registerHandler(COMPLETE, token, [completableFuture](const event_t *event) {
|
||||||
|
EventQueue::getInstance()->unregisterHandler(COMPLETE, event->token);
|
||||||
|
|
||||||
Master::runWithAttached<int>([&](JNIEnv *env) -> int {
|
Master::runWithAttached<int>([&](JNIEnv *env) -> int {
|
||||||
Master::runWithContext<void>(env, [&](Master::Context *context) {
|
Master::runWithContext<void>(env, [&](Master::Context *context) {
|
||||||
if ( strlen(event->payload) == 0 ) {
|
if ( strlen(event->payload) == 0 ) {
|
||||||
@@ -20,8 +22,6 @@ static std::pair<jobject, uint64_t> completableFutureWithToken(Master::Context *
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
EventQueue::getInstance()->unregisterHandler(COMPLETE, event->token);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return {completableFuture, token};
|
return {completableFuture, token};
|
||||||
|
|||||||
@@ -29,6 +29,11 @@ Java_com_github_kr328_clash_core_bridge_Bridge_startTunDevice(JNIEnv *env, jclas
|
|||||||
});
|
});
|
||||||
|
|
||||||
EventQueue::getInstance()->registerHandler(TUN_STOP, token, [callbackGlobal](const event_t *e) {
|
EventQueue::getInstance()->registerHandler(TUN_STOP, token, [callbackGlobal](const event_t *e) {
|
||||||
|
auto queue = EventQueue::getInstance();
|
||||||
|
|
||||||
|
queue->unregisterHandler(NEW_SOCKET, e->token);
|
||||||
|
queue->unregisterHandler(TUN_STOP, e->token);
|
||||||
|
|
||||||
Master::runWithAttached<int>([&](JNIEnv *env) -> int {
|
Master::runWithAttached<int>([&](JNIEnv *env) -> int {
|
||||||
Master::runWithContext<void>(env, [&](Master::Context *context) {
|
Master::runWithContext<void>(env, [&](Master::Context *context) {
|
||||||
context->tunCallbackStop(callbackGlobal);
|
context->tunCallbackStop(callbackGlobal);
|
||||||
@@ -37,11 +42,6 @@ Java_com_github_kr328_clash_core_bridge_Bridge_startTunDevice(JNIEnv *env, jclas
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
auto queue = EventQueue::getInstance();
|
|
||||||
|
|
||||||
queue->unregisterHandler(NEW_SOCKET, e->token);
|
|
||||||
queue->unregisterHandler(TUN_STOP, e->token);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
char *exception = startTunDevice(fd, mtu, gatewayString, mirrorString, dnsString, token);
|
char *exception = startTunDevice(fd, mtu, gatewayString, mirrorString, dnsString, token);
|
||||||
|
|||||||
Reference in New Issue
Block a user