1
0
mirror of https://github.com/php/php-src.git synced 2026-04-29 03:03:26 +02:00

Check interrupt only if the link is a part of the loop.

This commit is contained in:
Dmitry Stogov
2020-08-27 11:04:23 +03:00
parent c4fc453771
commit 3ead24ecfa
2 changed files with 6 additions and 3 deletions
+4 -1
View File
@@ -4843,7 +4843,10 @@ done:
goto jit_failure;
}
t->link = zend_jit_find_trace(p->opline->handler);
zend_jit_trace_link_to_root(&dasm_state, &zend_jit_traces[t->link]);
zend_jit_trace_link_to_root(&dasm_state, &zend_jit_traces[t->link],
parent_trace &&
(zend_jit_traces[t->link].flags & ZEND_JIT_TRACE_CHECK_INTERRUPT) &&
zend_jit_traces[parent_trace].root == t->link);
} else {
zend_jit_trace_return(&dasm_state, 0);
}
+2 -2
View File
@@ -3133,7 +3133,7 @@ static int zend_jit_link_side_trace(const void *code, size_t size, uint32_t jmp_
return zend_jit_patch(code, size, jmp_table_size, zend_jit_trace_get_exit_addr(exit_num), addr);
}
static int zend_jit_trace_link_to_root(dasm_State **Dst, zend_jit_trace_info *t)
static int zend_jit_trace_link_to_root(dasm_State **Dst, zend_jit_trace_info *t, zend_bool check_interrupt)
{
const void *link_addr;
size_t prologue_size;
@@ -3167,7 +3167,7 @@ static int zend_jit_trace_link_to_root(dasm_State **Dst, zend_jit_trace_info *t)
}
link_addr = (const void*)((const char*)t->code_start + prologue_size);
if (t->flags & ZEND_JIT_TRACE_CHECK_INTERRUPT) {
if (check_interrupt) {
/* Check timeout for links to LOOP */
| MEM_OP2_1_ZTS cmp, byte, executor_globals, vm_interrupt, 0, r0
| je &link_addr