Skip to content

Commit e1e24b0

Browse files
committed
fix segfault with dynamic proxy
1 parent e04710e commit e1e24b0

4 files changed

Lines changed: 13 additions & 3 deletions

File tree

-62 Bytes
Binary file not shown.

src-java/node/NodeDynamicProxyClass.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@ public NodeDynamicProxyClass(String path, long ptr) {
1616

1717
public Object invoke(Object proxy, java.lang.reflect.Method m, Object[] args) throws Throwable
1818
{
19-
return callJs(this.ptr, m, args);
19+
Object result = callJs(this.ptr, m, args);
20+
//if(result == null) {
21+
// System.out.println("invoke: null");
22+
//} else {
23+
// System.out.println("invoke: " + result + " class: " + result.getClass() + " to string: " + result.toString());
24+
//}
25+
return result;
2026
}
2127

2228
public void ref() {

src/java.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -670,8 +670,10 @@ void EIO_AfterCallJs(uv_work_t* req) {
670670
javaResult = v8ToJava(env, v8Result);
671671
if(javaResult == NULL) {
672672
dynamicProxyData->result = NULL;
673+
dynamicProxyData->resultGlobalRef = NULL;
673674
} else {
674-
dynamicProxyData->result = env->NewGlobalRef(javaResult);
675+
dynamicProxyData->result = javaResult;
676+
dynamicProxyData->resultGlobalRef = env->NewGlobalRef(javaResult);
675677
}
676678

677679
CleanUp:
@@ -686,6 +688,7 @@ JNIEXPORT jobject JNICALL Java_node_NodeDynamicProxyClass_callJs(JNIEnv *env, jo
686688
dynamicProxyData->args = args;
687689
dynamicProxyData->done = false;
688690
dynamicProxyData->result = NULL;
691+
dynamicProxyData->resultGlobalRef = NULL;
689692

690693
jclass methodClazz = env->FindClass("java/lang/reflect/Method");
691694
jmethodID method_getName = env->GetMethodID(methodClazz, "getName", "()Ljava/lang/String;");
@@ -707,7 +710,7 @@ JNIEXPORT jobject JNICALL Java_node_NodeDynamicProxyClass_callJs(JNIEnv *env, jo
707710
return NULL;
708711
}
709712
if(dynamicProxyData->result) {
710-
env->DeleteGlobalRef(dynamicProxyData->result);
713+
env->DeleteGlobalRef(dynamicProxyData->resultGlobalRef);
711714
}
712715
return dynamicProxyData->result;
713716
}

src/utils.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ struct DynamicProxyData {
3434
std::string methodName;
3535
jobjectArray args;
3636
jobject result;
37+
jobject resultGlobalRef;
3738
int done;
3839
unsigned int markerEnd;
3940
};

0 commit comments

Comments
 (0)