Skip to content

Commit 3760c6b

Browse files
committed
better java scoping
1 parent 9cd953b commit 3760c6b

3 files changed

Lines changed: 19 additions & 3 deletions

File tree

binding.gyp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
{
2929
'action_name': 'verifyDeps',
3030
'inputs': [
31-
'$(JAVA_HOME)/lib/jvm.lib'
31+
'$(JAVA_HOME)/lib/jvm.lib',
32+
'$(JAVA_HOME)/include/jni.h'
3233
],
3334
'outputs': ['./build/depsVerified'],
3435
'action': [],
@@ -49,7 +50,8 @@
4950
{
5051
'action_name': 'verifyDeps',
5152
'inputs': [
52-
'$(JAVA_HOME)jre/lib/<(arch)/server/libjvm.so'
53+
'$(JAVA_HOME)jre/lib/<(arch)/server/libjvm.so',
54+
'$(JAVA_HOME)/include/jni.h'
5355
],
5456
'outputs': ['./build/depsVerified'],
5557
'action': [],

src/java.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ v8::Handle<v8::Value> Java::createJVM(JavaVM** jvm, JNIEnv** env) {
165165
return ensureJvmResults;
166166
}
167167
JNIEnv* env = self->getJavaEnv();
168+
JavaScope javaScope(env);
168169

169170
jclass classClazz = env->FindClass("java/lang/ClassLoader");
170171
jmethodID class_getClassLoader = env->GetStaticMethodID(classClazz, "getSystemClassLoader", "()Ljava/lang/ClassLoader;");
@@ -182,6 +183,7 @@ v8::Handle<v8::Value> Java::createJVM(JavaVM** jvm, JNIEnv** env) {
182183
return ensureJvmResults;
183184
}
184185
JNIEnv* env = self->getJavaEnv();
186+
JavaScope javaScope(env);
185187

186188
int argsStart = 0;
187189
int argsEnd = args.Length();
@@ -221,6 +223,7 @@ v8::Handle<v8::Value> Java::createJVM(JavaVM** jvm, JNIEnv** env) {
221223
return ensureJvmResults;
222224
}
223225
JNIEnv* env = self->getJavaEnv();
226+
JavaScope javaScope(env);
224227

225228
int argsStart = 0;
226229
int argsEnd = args.Length();
@@ -263,6 +266,7 @@ v8::Handle<v8::Value> Java::createJVM(JavaVM** jvm, JNIEnv** env) {
263266
return ensureJvmResults;
264267
}
265268
JNIEnv* env = self->getJavaEnv();
269+
JavaScope javaScope(env);
266270

267271
int argsStart = 0;
268272
int argsEnd = args.Length();
@@ -318,6 +322,7 @@ v8::Handle<v8::Value> Java::createJVM(JavaVM** jvm, JNIEnv** env) {
318322
return ensureJvmResults;
319323
}
320324
JNIEnv* env = self->getJavaEnv();
325+
JavaScope javaScope(env);
321326

322327
int argsStart = 0;
323328
int argsEnd = args.Length();
@@ -358,6 +363,7 @@ v8::Handle<v8::Value> Java::createJVM(JavaVM** jvm, JNIEnv** env) {
358363
return ensureJvmResults;
359364
}
360365
JNIEnv* env = self->getJavaEnv();
366+
JavaScope javaScope(env);
361367

362368
int argsStart = 0;
363369
int argsEnd = args.Length();
@@ -401,6 +407,7 @@ v8::Handle<v8::Value> Java::createJVM(JavaVM** jvm, JNIEnv** env) {
401407
return ensureJvmResults;
402408
}
403409
JNIEnv* env = self->getJavaEnv();
410+
JavaScope javaScope(env);
404411

405412
int argsStart = 0;
406413
int argsEnd = args.Length();
@@ -430,6 +437,7 @@ v8::Handle<v8::Value> Java::createJVM(JavaVM** jvm, JNIEnv** env) {
430437
return ensureJvmResults;
431438
}
432439
JNIEnv* env = self->getJavaEnv();
440+
JavaScope javaScope(env);
433441

434442
int argsStart = 0;
435443
int argsEnd = args.Length();
@@ -498,6 +506,7 @@ v8::Handle<v8::Value> Java::createJVM(JavaVM** jvm, JNIEnv** env) {
498506
return ensureJvmResults;
499507
}
500508
JNIEnv* env = self->getJavaEnv();
509+
JavaScope javaScope(env);
501510

502511
if(args.Length() != 1) {
503512
return ThrowException(v8::Exception::TypeError(v8::String::New("newByte only takes 1 argument")));

src/methodCallBaton.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "methodCallBaton.h"
33
#include "java.h"
44
#include "javaObject.h"
5+
#include "javaScope.h"
56

67
MethodCallBaton::MethodCallBaton(Java* java, jobject method, jarray args, v8::Handle<v8::Value>& callback) {
78
JNIEnv *env = java->getJavaEnv();
@@ -41,7 +42,11 @@ v8::Handle<v8::Value> MethodCallBaton::runSync() {
4142
/*static*/ void MethodCallBaton::EIO_MethodCall(uv_work_t* req) {
4243
MethodCallBaton* self = static_cast<MethodCallBaton*>(req->data);
4344
JNIEnv *env = javaAttachCurrentThread(self->m_java->getJvm(), self->m_java->getClassLoader());
44-
self->execute(env);
45+
// scope the java scope to after/before attaching to thread.
46+
{
47+
JavaScope javaScope(env);
48+
self->execute(env);
49+
}
4550
javaDetachCurrentThread(self->m_java->getJvm());
4651
}
4752

0 commit comments

Comments
 (0)