2012-06-18 30 views
1

我正在做一些与uv_queue_work在一个node.js c + +插件并行工作。困难node.js + libuv + v8错误

一切工作正常,直到我试图从完整的方法回调JS

我得到:CHECK(thread_local_top() - > TryCatchHandler()== that)失败。

任何指针可能会导致此?

我使用下面的代码回调:

//Get emit method from JS object and check !IsEmpty and IsFunction 
    v8::TryCatch tc;     
    emit->Call(pxy,1,argv); // The error happens in this statement. 
    if (tc.HasCaught()){ 
     //Some handler code 
    } 
+0

对我来说就像你试图从另一个线程调用回调。你能发布一些更多的代码,比如你如何使用uv_queue_work? –

+0

这是我的第一个想法,我有以下运行的实用程序方法,据我了解,如果不是在V8线程应该返回false。 'bool Util :: V8Thread(){ return v8 :: Isolation :: GetCurrent()!= NULL; };' 我正在使用以下来启动进程: uv_queue_work(循环,接力棒,工人,WorkerComplete); 错误发生在“WorkerComplete “ –

+0

断言表明堆栈的try catch处理程序不知何故变得不平衡。很难猜测为什么没有看到更多的代码或至少从gdb的堆栈跟踪。 –

回答

0

OK,不知道确切原因的错误是怎么回事,但我可以使它使用节点:: MakeCallback代替emit-走开>呼叫。

真的不清楚,为什么发生这种情况,有点担心,因为出现了谈自嘲MakeCallback ...

编辑: 我会很乐意接受,可以在此揭示的任何答复。希望使用MakeCallback“在此期间保存其他人:)