From: Dmitry Stogov Date: Mon, 20 Jul 2020 20:14:23 +0000 (+0300) Subject: Fixed VM interrupt handling X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=774bc760af46897011cdfdc8fe6a1b27219c2b04;p=php Fixed VM interrupt handling --- diff --git a/ext/opcache/jit/zend_jit_vm_helpers.c b/ext/opcache/jit/zend_jit_vm_helpers.c index 0fdf7f15dd..c55ca991d4 100644 --- a/ext/opcache/jit/zend_jit_vm_helpers.c +++ b/ext/opcache/jit/zend_jit_vm_helpers.c @@ -742,6 +742,9 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex, if (rc < 0) { stop = ZEND_JIT_TRACE_STOP_RETURN_HALT; break; + } else if (execute_data == EG(current_execute_data)) { + /* return after interrupt handler */ + rc = 0; } execute_data = EG(current_execute_data); opline = EX(opline); @@ -763,7 +766,9 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex, #ifdef HAVE_GCC_GLOBAL_REGS if (execute_data->prev_execute_data == prev_execute_data) { #else - if (rc == 1) { + if (rc == 0) { + /* pass */ + } else if (rc == 1) { #endif /* Enter into function */ prev_call = NULL;