Thread related improvements made possible by upstream re commit #784

This commit is contained in:
Juha Heinanen
2023-05-03 14:53:00 +03:00
parent 9b1a3c1435
commit 8a7e43faa8

View File

@ -238,6 +238,7 @@ static void ua_event_handler(struct ua *ua, enum ua_event ev,
return;
}
re_thread_leave();
JNIEnv *env;
jint res = (*g_ctx.javaVM)->GetEnv(g_ctx.javaVM, (void**)&env, JNI_VERSION_1_6);
if (res != JNI_OK) {
@ -250,7 +251,7 @@ static void ua_event_handler(struct ua *ua, enum ua_event ev,
LOGD("sending ua/call %ld/%ld event %s\n", (long)ua, (long)call, event_buf);
(*env)->CallVoidMethod(env, g_ctx.mainActivityObj, methodId, jEvent, (jlong)ua, (jlong)call);
(*env)->DeleteLocalRef(env, jEvent);
re_thread_enter();
}
static void message_handler(struct ua *ua, const struct pl *peer, const struct pl *ctype,
@ -268,6 +269,7 @@ static void message_handler(struct ua *ua, const struct pl *peer, const struct p
return;
}
re_thread_leave();
JNIEnv *env;
jint res = (*g_ctx.javaVM)->GetEnv(g_ctx.javaVM, (void**)&env, JNI_VERSION_1_6);
if (res != JNI_OK) {
@ -291,6 +293,7 @@ static void message_handler(struct ua *ua, const struct pl *peer, const struct p
(*env)->CallVoidMethod(env, g_ctx.mainActivityObj, methodId, (jlong)ua, jPeer, jMsg);
(*env)->DeleteLocalRef(env, jPeer);
(*env)->DeleteLocalRef(env, jMsg);
re_thread_enter();
}
static void send_resp_handler(int err, const struct sip_msg *msg, void *arg)
@ -307,6 +310,7 @@ static void send_resp_handler(int err, const struct sip_msg *msg, void *arg)
LOGD("send_response_handler received response '%u %s' at %s\n", msg->scode,
reason_buf, (char *)arg);
re_thread_leave();
JNIEnv *env;
jint res = (*g_ctx.javaVM)->GetEnv(g_ctx.javaVM, (void**)&env, JNI_VERSION_1_6);
if (res != JNI_OK) {
@ -321,6 +325,7 @@ static void send_resp_handler(int err, const struct sip_msg *msg, void *arg)
(*env)->CallVoidMethod(env, g_ctx.mainActivityObj, methodId, msg->scode, javaReason, javaTime);
(*env)->DeleteLocalRef(env, javaReason);
(*env)->DeleteLocalRef(env, javaTime);
re_thread_enter();
}
enum {
@ -511,6 +516,7 @@ Java_com_tutpro_baresip_BaresipService_baresipStart(JNIEnv *env, jobject instanc
goto out;
}
// no need to call re_leave/enter since main is not running yet
jmethodID startedId = (*env)->GetMethodID(env, g_ctx.mainActivityClz, "started", "()V");
(*env)->CallVoidMethod(env, g_ctx.mainActivityObj, startedId);
@ -1055,14 +1061,12 @@ Java_com_tutpro_baresip_Api_ua_1hangup(JNIEnv *env, jobject thiz, jlong ua, jlon
const char *native_reason = (*env)->GetStringUTFChars(env, reason, 0);
const int thread_check = re_thread_check(false);
LOGD("hanging up call %ld/%ld\n", (long)ua, (long)call);
if (thread_check != 0)
re_thread_enter();
re_thread_enter();
if (strlen(native_reason) == 0)
ua_hangup((struct ua *)ua, (struct call *)call, native_code, NULL);
else
ua_hangup((struct ua *)ua, (struct call *)call, native_code, native_reason);
if (thread_check != 0)
re_thread_leave();
re_thread_leave();
(*env)->ReleaseStringUTFChars(env, reason, native_reason);
}