66
77MethodCallBaton::MethodCallBaton (Java* java, jobject method, jarray args, v8::Handle<v8::Value>& callback) {
88 JNIEnv *env = java->getJavaEnv ();
9-
109 m_java = java;
1110 m_args = (jarray)env->NewGlobalRef (args);
12- NanAssignPersistent (v8::Value, m_callback, callback);
11+ if (callback->IsFunction ()) {
12+ m_callback = new NanCallback (v8::Handle<v8::Function>::Cast (callback));
13+ } else {
14+ m_callback = new NanCallback ();
15+ }
1316 m_method = env->NewGlobalRef (method);
1417 m_error = NULL ;
1518 m_result = NULL ;
@@ -26,7 +29,7 @@ MethodCallBaton::~MethodCallBaton() {
2629 }
2730 env->DeleteGlobalRef (m_args);
2831 env->DeleteGlobalRef (m_method);
29- m_callback. Dispose () ;
32+ delete m_callback;
3033}
3134
3235void MethodCallBaton::run () {
@@ -64,20 +67,16 @@ v8::Handle<v8::Value> MethodCallBaton::runSync() {
6467void MethodCallBaton::after (JNIEnv *env) {
6568 NanScope ();
6669
67- v8::Local<v8::Value> callback = NanPersistentToLocal (m_callback);
68- if (callback->IsFunction ()) {
69- v8::Local<v8::Function> callback = v8::Local<v8::Function>::Cast (callback);
70- v8::Handle<v8::Value> result = resultsToV8 (env);
71- v8::Handle<v8::Value> argv[2 ];
72- if (result->IsNativeError ()) {
73- argv[0 ] = result;
74- argv[1 ] = v8::Undefined ();
75- } else {
76- argv[0 ] = v8::Undefined ();
77- argv[1 ] = result;
78- }
79- node::MakeCallback (v8::Context::GetCurrent ()->Global (), callback, 2 , argv);
70+ v8::Handle<v8::Value> result = resultsToV8 (env);
71+ v8::Handle<v8::Value> argv[2 ];
72+ if (result->IsNativeError ()) {
73+ argv[0 ] = result;
74+ argv[1 ] = v8::Undefined ();
75+ } else {
76+ argv[0 ] = v8::Undefined ();
77+ argv[1 ] = result;
8078 }
79+ m_callback->Call (2 , argv);
8180}
8281
8382v8::Handle<v8::Value> MethodCallBaton::resultsToV8 (JNIEnv *env) {
0 commit comments