Volker Birk 7 years ago
parent
commit
2a3c6090b1
  1. 5
      src/org/pEp/jniadapter/AbstractEngine.java
  2. 24
      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();
} }
} }

24
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,6 +44,12 @@ namespace pEp {
public: public:
JNIEnv * env() JNIEnv * env()
{ {
JNIEnv *_env;
if (on_sync_thread()) {
_env = first_env;
}
else {
if (!thread_env) { if (!thread_env) {
#ifdef ANDROID #ifdef ANDROID
jvm->AttachCurrentThread(&thread_env, nullptr); jvm->AttachCurrentThread(&thread_env, nullptr);
@ -43,7 +57,10 @@ namespace pEp {
jvm->AttachCurrentThread((void **) &thread_env, nullptr); jvm->AttachCurrentThread((void **) &thread_env, nullptr);
#endif #endif
} }
return thread_env; _env = 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