Hi,
I run my JS code in a v8 Isolate,
In another thread, I cancel the running JS program at any time using V8::TerminateExecution(isolate);
As I understand it, the TerminateExecution() raises an exception in the running isolate/context, which causes the running JS script to fail and stop.
If I run a tight while loop, like so:
while (1) {
print('hello');
}
which calls my Native_Print() C++ function, often the native function is running when things start to fail.
eg, the first time I call
String::New("whatnot");
it returns an empty handle because of the terminate exception.
When my Native_Print() detects the empty handle, it tries to throw an exception, which involves generating a new exception message, which calls String::New()
It seems that the second call to a V8 function (in this case, ToString()) triggers a fatal crash, like so:
#
# Fatal error in ../src/api.cc, line 2325
# CHECK(!(isolate)->external_caught_exception()) failed
#
I was able to work-around this problem by checking V8::IsExecutionTerminating() in my native function, BUT now I am hitting the same problem in the V8 core.
I am running a remote debugger (the Eclipse one). I start the script, pause it using the 'debugger;' command, then connect to it with Eclipse.
THEN, I cancel the execution using V8::TerminateExecution() via the second thread method within the program.
The script is still suspended and connected to the debugger.
THEN, in Eclipse, I click Step/continue/anything, and the host program crashes with the same Fatal error.
Am I terminating the javascript incorrectly?
Any ideas?
thanks very much,
Paul