Index: include/v8.h |
=================================================================== |
--- include/v8.h (revision 2717) |
+++ include/v8.h (working copy) |
@@ -2223,8 +2223,49 @@ |
*/ |
static int GetLogLines(int from_pos, char* dest_buf, int max_size); |
+ /** |
+ * Retrieve the V8 thread id of the calling thread. |
+ * |
+ * The thread id for a thread should only be retrieved after the V8 |
+ * lock has been acquired with a Locker object with that thread. |
+ */ |
+ static int GetCurrentThreadId(); |
/** |
+ * Forcefully terminate execution of a JavaScript thread. This can |
+ * be used to terminate long-running scripts. |
+ * |
+ * TerminateExecution should only be called when then V8 lock has |
+ * been acquired with a Locker object. Therefore, in order to be |
+ * able to terminate long-running threads, preemption must be |
+ * enabled to allow the user of TerminateExecution to acquire the |
+ * lock. |
+ * |
+ * The termination is achieved by throwing an exception that is |
+ * uncatchable by JavaScript exception handlers. Termination |
+ * exceptions act as if they were caught by a C++ TryCatch exception |
+ * handlers. If forceful termination is used, any C++ TryCatch |
+ * exception handler that catches an exception should check if that |
+ * exception is a termination exception and immediately return if |
+ * that is the case. Returning immediately in that case will |
+ * continue the propagation of the termination exception if needed. |
+ * |
+ * The thread id passed to TerminateExecution must have been |
+ * obtained by calling GetCurrentThreadId on the thread in question. |
+ * |
+ * \param thread_id The thread id of the thread to terminate. |
+ */ |
+ static void TerminateExecution(int thread_id); |
+ |
+ /** |
+ * Forcefully terminate the current thread of JavaScript execution. |
+ * |
+ * This method can be used by any thread even if that thread has not |
+ * acquired the V8 lock with a Locker object. |
+ */ |
+ static void TerminateExecution(); |
+ |
+ /** |
* Releases any resources used by v8 and stops any utility threads |
* that may be running. Note that disposing v8 is permanent, it |
* cannot be reinitialized. |
@@ -2282,6 +2323,21 @@ |
bool HasCaught() const; |
/** |
+ * For certain types of exceptions, it makes no sense to continue |
+ * execution. |
+ * |
+ * Currently, the only type of exception that can be caught by a |
+ * TryCatch handler and for which it does not make sense to continue |
+ * is termination exception. Such exceptions are thrown when the |
+ * TerminateExecution methods are called to terminate a long-running |
+ * script. |
+ * |
+ * If CanContinue returns false, the correct action is to perform |
+ * any C++ cleanup needed and then return. |
+ */ |
+ bool CanContinue() const; |
+ |
+ /** |
* Returns the exception caught by this try/catch block. If no exception has |
* been caught an empty handle is returned. |
* |
@@ -2337,6 +2393,7 @@ |
void* exception_; |
void* message_; |
bool is_verbose_; |
+ bool can_continue_; |
bool capture_message_; |
void* js_handler_; |
}; |