Skip to content

Commit

Permalink
Check interrupt only if the link is a part of the loop.
Browse files Browse the repository at this point in the history
  • Loading branch information
dstogov committed Aug 27, 2020
1 parent c4fc453 commit 3ead24e
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 3 deletions.
5 changes: 4 additions & 1 deletion ext/opcache/jit/zend_jit_trace.c
Original file line number Diff line number Diff line change
Expand Up @@ -4843,7 +4843,10 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
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);
}
Expand Down
4 changes: 2 additions & 2 deletions ext/opcache/jit/zend_jit_x86.dasc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 3ead24e

Please sign in to comment.