Browse Source

Use global refs

JNI-88
Hussein Kasem 7 years ago
parent
commit
866f2763a6
  1. 18
      src/org_pEp_jniadapter_AbstractEngine.cc

18
src/org_pEp_jniadapter_AbstractEngine.cc

@ -66,13 +66,13 @@ namespace pEp {
void startup_sync() void startup_sync()
{ {
needsFastPollMethodID = env()->GetMethodID( needsFastPollMethodID = env()->GetMethodID(
_clazz, engineClass,
"needsFastPollCallFromC", "needsFastPollCallFromC",
"(Z)I"); "(Z)I");
assert(needsFastPollMethodID); assert(needsFastPollMethodID);
notifyHandShakeMethodID = env()->GetMethodID( notifyHandShakeMethodID = env()->GetMethodID(
_clazz, engineClass,
"notifyHandshakeCallFromC", "notifyHandshakeCallFromC",
"(Lorg/pEp/jniadapter/_Identity;Lorg/pEp/jniadapter/_Identity;Lorg/pEp/jniadapter/SyncHandshakeSignal;)I"); "(Lorg/pEp/jniadapter/_Identity;Lorg/pEp/jniadapter/_Identity;Lorg/pEp/jniadapter/SyncHandshakeSignal;)I");
assert(notifyHandShakeMethodID); assert(notifyHandShakeMethodID);
@ -80,7 +80,7 @@ namespace pEp {
void shutdown_sync() void shutdown_sync()
{ {
env()->DeleteLocalRef(messageClass); env()->DeleteGlobalRef(messageClass);
jvm->DetachCurrentThread(); jvm->DetachCurrentThread();
} }
}; };
@ -92,6 +92,9 @@ namespace pEp {
jobject msg_ = nullptr; jobject msg_ = nullptr;
jint result = 0; jint result = 0;
if (!o)
o = new JNISync();
msg_ = o->env()->NewObject(messageClass, messageConstructorMethodID, (jlong) msg); msg_ = o->env()->NewObject(messageClass, messageConstructorMethodID, (jlong) msg);
result = o->env()->CallIntMethod(obj, messageToSendMethodID, msg_); result = o->env()->CallIntMethod(obj, messageToSendMethodID, msg_);
@ -150,7 +153,7 @@ extern "C" {
env->GetJavaVM(&jvm); env->GetJavaVM(&jvm);
thread_env = env; thread_env = env;
obj = me; obj = env->NewGlobalRef(me);
_clazz = env->GetObjectClass(obj); _clazz = env->GetObjectClass(obj);
if (!o) if (!o)
@ -188,7 +191,12 @@ extern "C" {
) )
{ {
shutdown(); shutdown();
env->DeleteLocalRef(_clazz);
env->DeleteGlobalRef(identityClass);
env->DeleteGlobalRef(signalClass);
env->DeleteGlobalRef(engineClass);
env->DeleteGlobalRef(obj);
session(pEp::Adapter::release); session(pEp::Adapter::release);
delete o; delete o;
} }

Loading…
Cancel
Save