我意识到使用DUK_USE_EXEC_TIMEOUT_CHECK
是实验性的(从 1.5 开始),但我不清楚如何最好地利用它。我要做的是对操作码执行施加硬性限制,以防止不良脚本通过无限循环、大型处理块等杀死我的进程。我已经定义了我认为合适的内容,即:
#define DUK_OPT_INTERRUPT_COUNTER
#define DUK_OPT_EXEC_TIMEOUT_CHECK duk_my_exec_timeout
int duk_my_exec_timeout( void *udata ) {
return stop_processing ? 1 : 0;
}
问题:我有很多上下文,但udata
不足以区分它们。不过,这对于我的需求可能不是必需的。
问题:函数在意想不到的地方被调用,比如在调用过程中duk_create_heap
,甚至是简单的duk_peval_string
调用,我无法知道为什么。
duk__executor_interrupt
通过修改代码以传递线程/上下文interrupt_init
成员,我已经将我认为现在可以让我通过的东西拼凑起来,如下所示:
if (DUK_USE_EXEC_TIMEOUT_CHECK(thr->interrupt_init, thr->heap->heap_udata)) {
...
}
似乎当它不为零时,我已经达到了一些内部操作码处理限制。这听起来对吗?
然后我的超时例程如下所示:
int duk_my_exec_timeout( int interrupt, void *udata ) {
if ( interrupt ) {
return 1;
}
else {
return 0;
}
}
谢谢!