unregister handler before delete global reference

This commit is contained in:
Kr328
2020-06-13 20:10:55 +08:00
parent 389ecb3e8f
commit acb718edad
2 changed files with 7 additions and 7 deletions

View File

@@ -7,6 +7,8 @@ static std::pair<jobject, uint64_t> completableFutureWithToken(Master::Context *
jobject completableFuture = context->newGlobalReference(context->newCompletableFuture());
EventQueue::getInstance()->registerHandler(COMPLETE, token, [completableFuture](const event_t *event) {
EventQueue::getInstance()->unregisterHandler(COMPLETE, event->token);
Master::runWithAttached<int>([&](JNIEnv *env) -> int {
Master::runWithContext<void>(env, [&](Master::Context *context) {
if ( strlen(event->payload) == 0 ) {
@@ -20,8 +22,6 @@ static std::pair<jobject, uint64_t> completableFutureWithToken(Master::Context *
return 0;
});
EventQueue::getInstance()->unregisterHandler(COMPLETE, event->token);
});
return {completableFuture, token};

View File

@@ -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) {
auto queue = EventQueue::getInstance();
queue->unregisterHandler(NEW_SOCKET, e->token);
queue->unregisterHandler(TUN_STOP, e->token);
Master::runWithAttached<int>([&](JNIEnv *env) -> int {
Master::runWithContext<void>(env, [&](Master::Context *context) {
context->tunCallbackStop(callbackGlobal);
@@ -37,11 +42,6 @@ Java_com_github_kr328_clash_core_bridge_Bridge_startTunDevice(JNIEnv *env, jclas
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);