Volker Birk 7 years ago
parent
commit
2a3c6090b1
  1. 5
      src/org/pEp/jniadapter/AbstractEngine.java
  2. 36
      src/org_pEp_jniadapter_AbstractEngine.cc

5
src/org/pEp/jniadapter/AbstractEngine.java

@ -14,13 +14,18 @@ abstract class AbstractEngine implements AutoCloseable {
private Sync.notifyHandshakeCallback notifyHandshakeCallback;
private Sync.NeedsFastPollCallback needsFastPollCallback;
private native void init();
private native void release();
public AbstractEngine() throws pEpException {
synchronized (AbstractEngine.class) {
init();
}
}
final public void close() {
synchronized (AbstractEngine.class){
release();
}
}

36
src/org_pEp_jniadapter_AbstractEngine.cc

@ -1,5 +1,12 @@
#include "org_pEp_jniadapter_AbstractEngine.h"
#ifndef ANDROID
#ifndef NDEBUG
#include <fstream>
std::ofstream debug_log("debug.log");
#endif
#endif
#include <stdexcept>
#include <unistd.h>
#include <assert.h>
@ -18,7 +25,8 @@ namespace pEp {
using namespace utility;
JavaVM *jvm= nullptr;
thread_local JNIEnv* thread_env = nullptr;
thread_local JNIEnv *thread_env = nullptr;
JNIEnv *first_env = nullptr;
jobject obj = nullptr;
jclass _clazz = nullptr;
@ -36,14 +44,23 @@ namespace pEp {
public:
JNIEnv * env()
{
if (!thread_env) {
#ifdef ANDROID
jvm->AttachCurrentThread(&thread_env, nullptr);
#else
jvm->AttachCurrentThread((void **) &thread_env, nullptr);
#endif
JNIEnv *_env;
if (on_sync_thread()) {
_env = first_env;
}
else {
if (!thread_env) {
#ifdef ANDROID
jvm->AttachCurrentThread(&thread_env, nullptr);
#else
jvm->AttachCurrentThread((void **) &thread_env, nullptr);
#endif
}
_env = thread_env;
}
return thread_env;
return _env;
}
void startup_sync()
@ -128,6 +145,9 @@ extern "C" {
jobject me
)
{
if (!first_env)
first_env = env;
env->GetJavaVM(&jvm);
thread_env = env;
obj = me;

Loading…
Cancel
Save