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
--
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users