From 44665fe88a1a22a0fb39a27c2d5a35f8ff2df7b1 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 2 Dec 2014 12:42:57 +0100 Subject: [PATCH] Added implem of remove_listener in jni layer, fixing crash occuring on second call --- coreapi/linphonecore_jni.cc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index 83d28ef8c..42d22a0e1 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -1032,7 +1032,21 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_addListener(JNIEnv* env, } extern "C" void Java_org_linphone_core_LinphoneCoreImpl_removeListener(JNIEnv* env, jobject thiz, jlong lc, jobject jlistener) { - //TODO + MSList* iterator; + LinphoneCore *core = (LinphoneCore*)lc; + jobject listener = env->NewGlobalRef(jlistener); + for (iterator = core->vtables; iterator != NULL; iterator = iterator->next) { + LinphoneCoreVTable *vTable = (LinphoneCoreVTable*)(iterator->data); + if (vTable) { + LinphoneCoreData *data = (LinphoneCoreData*) linphone_core_v_table_get_user_data(vTable); + if (data && env->IsSameObject(data->listener, listener)) { + linphone_core_remove_listener(core, vTable); + linphone_core_v_table_destroy(vTable); + break; + } + } + } + env->DeleteGlobalRef(listener); } extern "C" jint Java_org_linphone_core_LinphoneCoreImpl_migrateToMultiTransport(JNIEnv* env -- 2.21.0