1414
1515#define DYNAMIC_PROXY_JS_ERROR -4
1616
17- long v8ThreadId;
17+ #ifdef WIN32
18+ typedef long threadId;
19+ #else
20+ typedef pthread_t threadId;
21+ #endif
22+
23+ threadId v8ThreadId;
1824
1925/* static*/ Nan::Persistent<v8::FunctionTemplate> Java::s_ct;
2026/* static*/ std::string Java::s_nativeBindingLocation;
@@ -27,11 +33,19 @@ void my_sleep(int dur) {
2733#endif
2834}
2935
30- long my_getThreadId () {
36+ threadId my_getThreadId () {
3137#ifdef WIN32
3238 return (long )GetCurrentThreadId ();
3339#else
34- return (long )pthread_self ();
40+ return pthread_self ();
41+ #endif
42+ }
43+
44+ bool v8ThreadIdEquals (threadId a, threadId b) {
45+ #ifdef WIN32
46+ return a == b;
47+ #else
48+ return pthread_equal (a, b);
3549#endif
3650}
3751
@@ -1297,7 +1311,8 @@ void throwNewThrowable(JNIEnv* env, const char * excClassName, std::string msg)
12971311}
12981312
12991313JNIEXPORT jobject JNICALL Java_node_NodeDynamicProxyClass_callJs (JNIEnv *env, jobject src, jlong ptr, jobject method, jobjectArray args) {
1300- long myThreadId = my_getThreadId ();
1314+ threadId myThreadId = my_getThreadId ();
1315+
13011316 bool hasArgsGlobalRef = false ;
13021317
13031318 // args needs to be global, you can't send env across thread boundaries
@@ -1315,7 +1330,7 @@ JNIEXPORT jobject JNICALL Java_node_NodeDynamicProxyClass_callJs(JNIEnv *env, jo
13151330
13161331 uv_work_t * req = new uv_work_t ();
13171332 req->data = dynamicProxyData;
1318- if (myThreadId == v8ThreadId) {
1333+ if (v8ThreadIdEquals ( myThreadId, v8ThreadId) ) {
13191334#if NODE_MINOR_VERSION >= 10
13201335 EIO_AfterCallJs (req, 0 );
13211336#else
0 commit comments