@@ -4146,6 +4146,14 @@ ZEND_VM_HOT_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL,OBSERVER))
4146
4146
#endif
4147
4147
ZEND_OBSERVER_FCALL_END (call , EG (exception ) ? NULL : ret );
4148
4148
4149
+ if (UNEXPECTED (zend_atomic_bool_load_ex (& EG (vm_interrupt )))) {
4150
+ if (zend_atomic_bool_load_ex (& EG (timed_out ))) {
4151
+ zend_timeout ();
4152
+ } else if (zend_interrupt_function ) {
4153
+ zend_interrupt_function (execute_data );
4154
+ }
4155
+ }
4156
+
4149
4157
EG (current_execute_data ) = execute_data ;
4150
4158
4151
4159
ZEND_VM_C_LABEL (fcall_by_name_end ):
@@ -4170,7 +4178,9 @@ ZEND_VM_C_LABEL(fcall_by_name_end):
4170
4178
zend_rethrow_exception (execute_data );
4171
4179
HANDLE_EXCEPTION ();
4172
4180
}
4173
- ZEND_VM_SET_OPCODE (opline + 1 );
4181
+ // todo: under what circumstances do ZEND_USER_FUNCTIONs take this code path?
4182
+ CHECK_SYMBOL_TABLES ()
4183
+ OPLINE = opline + 1 ;
4174
4184
ZEND_VM_CONTINUE ();
4175
4185
}
4176
4186
@@ -4258,6 +4268,14 @@ ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL,OBSERVER))
4258
4268
#endif
4259
4269
ZEND_OBSERVER_FCALL_END (call , EG (exception ) ? NULL : ret );
4260
4270
4271
+ if (UNEXPECTED (zend_atomic_bool_load_ex (& EG (vm_interrupt )))) {
4272
+ if (zend_atomic_bool_load_ex (& EG (timed_out ))) {
4273
+ zend_timeout ();
4274
+ } else if (zend_interrupt_function ) {
4275
+ zend_interrupt_function (execute_data );
4276
+ }
4277
+ }
4278
+
4261
4279
EG (current_execute_data ) = execute_data ;
4262
4280
4263
4281
ZEND_VM_C_LABEL (fcall_end ):
@@ -4281,7 +4299,9 @@ ZEND_VM_C_LABEL(fcall_end):
4281
4299
HANDLE_EXCEPTION ();
4282
4300
}
4283
4301
4284
- ZEND_VM_SET_OPCODE (opline + 1 );
4302
+ // todo: under what circumstances do ZEND_USER_FUNCTIONs take this code path?
4303
+ CHECK_SYMBOL_TABLES ()
4304
+ OPLINE = opline + 1 ;
4285
4305
ZEND_VM_CONTINUE ();
4286
4306
}
4287
4307
0 commit comments