(Sorry that this post may be Blink-specific) I'm having trouble using TerminateExecution to kill a Service Worker that's in a loop like this: while (true) { console.log('hi'); }
Loop bodies like {} and [ self.location; } work as expected. It seems specific to console.log, and it's racy: most of the time it fails, but occasionally it works. I think the termination exception may be eaten in the following stack: #3 0x00007fc7ee66f0b7 in v8::internal::Execution::TryCall (func=..., receiver=..., argc=0, args=0x0, exception_out=<optimized out>) at ../../v8/src/execution.cc:207 #4 0x00007fc7ee8bcdce in v8::internal::Script::GetNameOrSourceURL (script=...) at ../../v8/src/objects.cc:10142 #5 0x00007fc7ee802885 in v8::internal::CaptureStackTraceHelper::NewStackFrameObject (this=0x7fc7cfc2ad70, fun=..., code=..., pc=<optimized out>, is_constructor=false) at ../../v8/src/isolate.cc:551 #6 0x00007fc7ee801bb1 in v8::internal::Isolate::CaptureCurrentStackTrace (this=0x3c84dc05c020, frame_limit=<optimized out>, options=<optimized out>) at ../../v8/src/isolate.cc:654 TryCall has a |is_termination| variable, which looks like it causes a "rethrow" of TerminateExecution, but it's never set to true because |exception_out| is NULL. However, just changing the function to rethrow did not appear to solve the issue. I wonder if GetNameOrSourceURL or someone else needs to detect the exception. When termination works, I can capture a stack trace (below), which looks like exception is "caught" within V8ScriptRunner:runCompiledScript, and ultimately we can leave V8. But when it doesn't work, it looks like it's "caught" in a mystery stack that starts with blink::ConsoleBaseV8Internal::logMethodCallback, and we ultimately loop forever calling that method. More context is at: https://codereview.chromium.org/912753002/ (Stack trace from a trial that works) #0 v8::internal::Isolate::PropagatePendingExceptionToExternalTryCatch (this=0x3c84dbf4f020) at ../../v8/src/isolate.cc:1955 #1 0x00007fc7ee807a59 in v8::internal::Isolate::OptionalRescheduleException (this=0x3c84dbf4f020, is_bottom_call=true) at ../../v8/src/isolate.cc:1447 #2 0x00007fc7ee45351e in v8::Script::Run (this=<optimized out>) at ../../v8/src/api.cc:1515 #3 0x00007fc7e34165cb in blink::V8ScriptRunner::runCompiledScript (isolate=0x3c84dbf4f020, script=..., context=0x1e1b9e050fa8) at ../../third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.cpp:400 #4 0x00007fc7e342aaf1 in blink::WorkerScriptController::evaluate (this=0x3c84dbff6230, script="// oninstall = function() {\n while (true) {\n console.log('i am still alive');\n }\n// }\n", fileName="http://localhost:8009/resources/fetch-forever-worker.js", scriptStartPosition=...) at ../../third_party/WebKit/Source/bindings/core/v8/WorkerScriptController.cpp:217 (Stack trace from a trial that fails) #0 v8::internal::Isolate::PropagatePendingExceptionToExternalTryCatch (this=0x3c84dc05c020) at ../../v8/src/isolate.cc:1955 #1 0x00007fc7ee807a59 in v8::internal::Isolate::OptionalRescheduleException (this=0x3c84dc05c020, is_bottom_call=true) at ../../v8/src/isolate.cc:1447 #2 0x00007fc7ee66f184 in v8::internal::Execution::TryCall (func=..., receiver=..., argc=<optimized out>, args=<optimized out>, exception_out=<optimized out>) at ../../v8/src/execution.cc:221 #3 0x00007fc7ee8bcdce in v8::internal::Script::GetNameOrSourceURL (script=...) at ../../v8/src/objects.cc:10142 #4 0x00007fc7ee802885 in v8::internal::CaptureStackTraceHelper::NewStackFrameObject (this=0x7fc7cfc2ad70, fun=..., code=..., pc=<optimized out>, is_constructor=false) at ../../v8/src/isolate.cc:551 #5 0x00007fc7ee801bb1 in v8::internal::Isolate::CaptureCurrentStackTrace (this=0x3c84dc05c020, frame_limit=<optimized out>, options=<optimized out>) at ../../v8/src/isolate.cc:654 #6 0x00007fc7ee461052 in v8::StackTrace::CurrentStackTrace (isolate=0x3c84dc05c020, frame_limit=-290331648, options=<optimized out>) at ../../v8/src/api.cc:2154 #7 0x00007fc7e339541d in blink::createScriptCallStack (maxStackSize=1, emptyStackIsAllowed=true) at ../../third_party/WebKit/Source/bindings/core/v8/ScriptCallStackFactory.cpp:111 #8 0x00007fc7e3395514 in blink::createScriptCallStackForConsole (maxStackSize=200, emptyStackIsAllowed=true) at ../../third_party/WebKit/Source/bindings/core/v8/ScriptCallStackFactory.cpp:125 #9 0x00007fc7e476f045 in blink::ConsoleMessage::collectCallStack (this=0x1e1b9e245c30) at ../../third_party/WebKit/Source/core/inspector/ConsoleMessage.cpp:185 #10 0x00007fc7e476f69f in blink::ConsoleMessageStorage::reportMessage (this=0x1e1b9e0cbf50, context=0x1e1b9e050fa8, prpMessage=...) at ../../third_party/WebKit/Source/core/inspector/ConsoleMessageStorage.cpp:25 #11 0x00007fc7e49ccc8a in blink::WorkerGlobalScope::addMessageToWorkerConsole (this=0x1e1b9e050f10, consoleMessage=...) at ../../third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp:309 #12 0x00007fc7e49ccb71 in blink::WorkerGlobalScope::addConsoleMessage (this=0x1e1b9e050f10, prpConsoleMessage=...) at ../../third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp:303 #13 0x00007fc7e49c82af in blink::WorkerConsole::reportMessageToConsole (this=0x1e1b9e0dd390, consoleMessage=...) at ../../third_party/WebKit/Source/core/workers/WorkerConsole.cpp:59 #14 0x00007fc7e46d4986 in blink::ConsoleBase::internalAddMessage (this=0x1e1b9e0dd390, type=blink::LogMessageType, level=blink::LogMessageLevel, scriptState=0x1e1b9e0cce98, scriptArguments=..., acceptNoArguments=false, printTrace=false) at ../../third_party/WebKit/Source/core/frame/ConsoleBase.cpp:228 #15 0x00007fc7e46d4b19 in blink::ConsoleBase::log (this=0x1e1b9e0dd390, scriptState=0x1e1b9e0cce98, arguments=...) at ../../third_party/WebKit/Source/core/frame/ConsoleBase.cpp:64 #16 0x00007fc7e359f4d2 in blink::ConsoleBaseV8Internal::logMethod (info=...) at gen/blink/bindings/core/v8/V8ConsoleBase.cpp:86 #17 0x00007fc7e359ad64 in blink::ConsoleBaseV8Internal::logMethodCallback (info=...) at gen/blink/bindings/core/v8/V8ConsoleBase.cpp:92 #18 0x00000f1dd5059484 in ?? () #19 0x00007fc7cfc2b4c0 in ?? () #20 0x00007fc7cfc2b4f8 in ?? () #21 0x0000000000000001 in ?? () #22 0x0000000000000000 in ?? () -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.