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.notifyHandshakeCallback notifyHandshakeCallback;
private Sync.NeedsFastPollCallback needsFastPollCallback; private Sync.NeedsFastPollCallback needsFastPollCallback;
private native void init();
private native void release();
public AbstractEngine() throws pEpException { public AbstractEngine() throws pEpException {
synchronized (AbstractEngine.class) { synchronized (AbstractEngine.class) {
init();
} }
} }
final public void close() { final public void close() {
synchronized (AbstractEngine.class){ synchronized (AbstractEngine.class){
release();
} }
} }

36
src/org_pEp_jniadapter_AbstractEngine.cc

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

Loading…
Cancel
Save