Skip to content

Commit 741a071

Browse files
SessionHero01SessionHero01
andauthored
Catch c++ exception happened during config push (#5)
Co-authored-by: SessionHero01 <[email protected]>
1 parent 43338ae commit 741a071

File tree

1 file changed

+21
-19
lines changed

1 file changed

+21
-19
lines changed

library/src/main/cpp/config_base.cpp

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,26 +26,28 @@ Java_network_loki_messenger_libsession_1util_ConfigBase_needsDump(JNIEnv *env, j
2626

2727
JNIEXPORT jobject JNICALL
2828
Java_network_loki_messenger_libsession_1util_ConfigBase_push(JNIEnv *env, jobject thiz) {
29-
std::lock_guard lock{util::util_mutex_};
30-
auto config = ptrToConfigBase(env, thiz);
31-
auto push_tuple = config->push();
32-
auto to_push_str = std::get<1>(push_tuple);
33-
auto to_delete = std::get<2>(push_tuple);
29+
return jni_utils::run_catching_cxx_exception_or_throws<jobject>(env, [=] {
30+
std::lock_guard lock{util::util_mutex_};
31+
auto config = ptrToConfigBase(env, thiz);
32+
auto push_tuple = config->push();
33+
auto to_push_str = std::get<1>(push_tuple);
34+
auto to_delete = std::get<2>(push_tuple);
3435

35-
jbyteArray returnByteArray = util::bytes_from_vector(env, to_push_str);
36-
jlong seqNo = std::get<0>(push_tuple);
37-
jclass returnObjectClass = env->FindClass("network/loki/messenger/libsession_util/util/ConfigPush");
38-
jclass stackClass = env->FindClass("java/util/Stack");
39-
jmethodID methodId = env->GetMethodID(returnObjectClass, "<init>", "([BJLjava/util/List;)V");
40-
jmethodID stack_init = env->GetMethodID(stackClass, "<init>", "()V");
41-
jobject our_stack = env->NewObject(stackClass, stack_init);
42-
jmethodID push_stack = env->GetMethodID(stackClass, "push", "(Ljava/lang/Object;)Ljava/lang/Object;");
43-
for (auto entry : to_delete) {
44-
auto entry_jstring = env->NewStringUTF(entry.data());
45-
env->CallObjectMethod(our_stack, push_stack, entry_jstring);
46-
}
47-
jobject returnObject = env->NewObject(returnObjectClass, methodId, returnByteArray, seqNo, our_stack);
48-
return returnObject;
36+
jbyteArray returnByteArray = util::bytes_from_vector(env, to_push_str);
37+
jlong seqNo = std::get<0>(push_tuple);
38+
jclass returnObjectClass = env->FindClass("network/loki/messenger/libsession_util/util/ConfigPush");
39+
jclass stackClass = env->FindClass("java/util/Stack");
40+
jmethodID methodId = env->GetMethodID(returnObjectClass, "<init>", "([BJLjava/util/List;)V");
41+
jmethodID stack_init = env->GetMethodID(stackClass, "<init>", "()V");
42+
jobject our_stack = env->NewObject(stackClass, stack_init);
43+
jmethodID push_stack = env->GetMethodID(stackClass, "push", "(Ljava/lang/Object;)Ljava/lang/Object;");
44+
for (auto entry : to_delete) {
45+
auto entry_jstring = env->NewStringUTF(entry.data());
46+
env->CallObjectMethod(our_stack, push_stack, entry_jstring);
47+
}
48+
jobject returnObject = env->NewObject(returnObjectClass, methodId, returnByteArray, seqNo, our_stack);
49+
return returnObject;
50+
});
4951
}
5052

5153
JNIEXPORT void JNICALL

0 commit comments

Comments
 (0)