From caa0ce61095641770ba97c4d2e659f8301d6a13d Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Sun, 4 Oct 2015 21:53:18 +0200 Subject: [PATCH] prevent a crash if the chat message listener is destroyed. --- coreapi/linphonecore_jni.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index 8e794716a..01d63f74b 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -3276,6 +3276,11 @@ static void message_state_changed(LinphoneChatMessage* msg, LinphoneChatMessageS } jobject listener = (jobject) msg->message_state_changed_user_data; + + if (listener == NULL) { + ms_error("message_state_changed() notification without listener"); + return ; + } jclass clazz = (jclass) env->GetObjectClass(listener); jmethodID method = env->GetMethodID(clazz, "onLinphoneChatMessageStateChanged","(Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneChatMessage$State;)V"); jobject jmessage = getChatMessage(env, msg); @@ -3287,6 +3292,7 @@ static void message_state_changed(LinphoneChatMessage* msg, LinphoneChatMessageS if (state == LinphoneChatMessageStateDelivered || state == LinphoneChatMessageStateNotDelivered) { env->DeleteGlobalRef(listener); + msg->message_state_changed_user_data = NULL; } env->DeleteLocalRef(chatMessageStateClass); }