Я пишу аддон Node.js c ++, который требует частых обратных вызовов из C ++ в Javascript.
Для конструктора требуются две функции: успех и обратный вызов ошибки.
...
// assuming info[0] and info[1] are functions with ->IsFunction()
MyClass* myClass = new MyClass();
myClass->Wrap(info.Holder());
myClass->onStateUpdateCallback = new Nan::Callback(info[0].As<v8::Function>());
myClass->onErrorCallback = new Nan::Callback(info[1].As<v8::Function>());
...
onStateUpdateCallback
и onErrorCallback
являются частными свойствами класса MyClass, определенного следующим образом:
...
Nan::Callback* onStateUpdateCallback;
Nan::Callback* onErrorCallback;
...
Теперь, когда я вызываю onStateUpdateCallback
из другой функции, она работает в первый раз, но завершается с ошибкой во второй раз,throwing EXC_BAD_ACCESS
(при отладке с помощью lldb
).
Вот как я вызываю обратный вызов ( Примечание: функция вызывается из внешней библиотеки, которая выполняет вызовы в разных потоках в первый разв основном потоке, второй раз в потоке # 13, который может вызвать проблему! ):
...
const int argc = 4;
// The arguments should be numbers and strings, but I simplified it to null...
v8::Local<v8::Value> argv[argc] = {
Nan::Null(),
Nan::Null(),
Nan::Null(),
Nan::Null()
};
onStateUpdateCallback->Call(argc, argv);
...
Я предполагаю, что функция или область видимости были собраны мусором Javascript, но яПонятия не имею, как предотвратить такое поведение, есть идеи?
Спасибо.