语境
plv8 javascript语言数据库的postgreSQL扩展使用V8隔离来计算javascript代码作为查询。当基于plv8 8的查询被取消时,信号处理代码将执行分离方法。这最终引发中断,将线程本地interrupt_flags
设置为终止。假定,当隔离继续执行时,中断处理程序将抛出终止异常。稍后,语言扩展使用IsExecutionTerminating
方法来确定隔离器是否收到了异常,并使用CancelTerminateExecution
清除异常。
问题所在
但是,在某些情况下,在执行新的javascript查询之前,对TerminateExecution
的调用是与隔离器的最后一次交互。在这种情况下,隔离仍然被中断,但是IsExecutionTerminating
将返回false
,因为中断。然后,当它开始执行下一个查询时,会抛出中断被处理。和异常,并且由于取消了先前的查询,当前查询将失败。
问题是
我对v8专家的问题是:在运行隔离程序中的js之前,有什么方法可以有效地清除中断吗?或者,是否有任何简单的方法来触发抛出的异常,以便在任何基于查询的代码之前取消异常?
发布于 2022-08-09 15:23:07
你试过无条件地打电话给CancelTerminateExecution
吗?这应该能起作用。
(如果您愿意,您还可以在您的终端上跟踪TerminateExecution
以前是否被调用过,但我认为CancelTerminateExecution太便宜了,根本不值得。)
https://stackoverflow.com/questions/73292695
复制相似问题