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
+9 -5
View File
@@ -238,6 +238,7 @@ static void ua_event_handler(struct ua *ua, enum ua_event ev,
return; return;
} }
re_thread_leave();
JNIEnv *env; JNIEnv *env;
jint res = (*g_ctx.javaVM)->GetEnv(g_ctx.javaVM, (void**)&env, JNI_VERSION_1_6); jint res = (*g_ctx.javaVM)->GetEnv(g_ctx.javaVM, (void**)&env, JNI_VERSION_1_6);
if (res != JNI_OK) { 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); 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)->CallVoidMethod(env, g_ctx.mainActivityObj, methodId, jEvent, (jlong)ua, (jlong)call);
(*env)->DeleteLocalRef(env, jEvent); (*env)->DeleteLocalRef(env, jEvent);
re_thread_enter();
} }
static void message_handler(struct ua *ua, const struct pl *peer, const struct pl *ctype, 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; return;
} }
re_thread_leave();
JNIEnv *env; JNIEnv *env;
jint res = (*g_ctx.javaVM)->GetEnv(g_ctx.javaVM, (void**)&env, JNI_VERSION_1_6); jint res = (*g_ctx.javaVM)->GetEnv(g_ctx.javaVM, (void**)&env, JNI_VERSION_1_6);
if (res != JNI_OK) { 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)->CallVoidMethod(env, g_ctx.mainActivityObj, methodId, (jlong)ua, jPeer, jMsg);
(*env)->DeleteLocalRef(env, jPeer); (*env)->DeleteLocalRef(env, jPeer);
(*env)->DeleteLocalRef(env, jMsg); (*env)->DeleteLocalRef(env, jMsg);
re_thread_enter();
} }
static void send_resp_handler(int err, const struct sip_msg *msg, void *arg) 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, LOGD("send_response_handler received response '%u %s' at %s\n", msg->scode,
reason_buf, (char *)arg); reason_buf, (char *)arg);
re_thread_leave();
JNIEnv *env; JNIEnv *env;
jint res = (*g_ctx.javaVM)->GetEnv(g_ctx.javaVM, (void**)&env, JNI_VERSION_1_6); jint res = (*g_ctx.javaVM)->GetEnv(g_ctx.javaVM, (void**)&env, JNI_VERSION_1_6);
if (res != JNI_OK) { 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)->CallVoidMethod(env, g_ctx.mainActivityObj, methodId, msg->scode, javaReason, javaTime);
(*env)->DeleteLocalRef(env, javaReason); (*env)->DeleteLocalRef(env, javaReason);
(*env)->DeleteLocalRef(env, javaTime); (*env)->DeleteLocalRef(env, javaTime);
re_thread_enter();
} }
enum { enum {
@@ -511,6 +516,7 @@ Java_com_tutpro_baresip_BaresipService_baresipStart(JNIEnv *env, jobject instanc
goto out; 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"); jmethodID startedId = (*env)->GetMethodID(env, g_ctx.mainActivityClz, "started", "()V");
(*env)->CallVoidMethod(env, g_ctx.mainActivityObj, startedId); (*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 char *native_reason = (*env)->GetStringUTFChars(env, reason, 0);
const int thread_check = re_thread_check(false); const int thread_check = re_thread_check(false);
LOGD("hanging up call %ld/%ld\n", (long)ua, (long)call); 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) if (strlen(native_reason) == 0)
ua_hangup((struct ua *)ua, (struct call *)call, native_code, NULL); ua_hangup((struct ua *)ua, (struct call *)call, native_code, NULL);
else else
ua_hangup((struct ua *)ua, (struct call *)call, native_code, native_reason); 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); (*env)->ReleaseStringUTFChars(env, reason, native_reason);
} }