Only backup vm_stack* if generator->stack has not been freed

This commit is contained in:
Bob Weinand 2015-01-12 22:30:38 +01:00
parent 2387771daf
commit 0445974cb1

View file

@ -322,13 +322,14 @@ ZEND_API void zend_generator_resume(zend_generator *generator) /* {{{ */
zend_execute_ex(generator->execute_data); zend_execute_ex(generator->execute_data);
generator->flags &= ~ZEND_GENERATOR_CURRENTLY_RUNNING; generator->flags &= ~ZEND_GENERATOR_CURRENTLY_RUNNING;
/* Unlink generator call_frame from the caller */ /* Unlink generator call_frame from the caller and backup vm_stack_top */
if (generator->execute_data) { if (generator->execute_data) {
generator->stack = EG(vm_stack);
generator->stack->top = EG(vm_stack_top);
generator->execute_data->prev_execute_data = NULL; generator->execute_data->prev_execute_data = NULL;
} }
/* Restore executor globals */ /* Restore executor globals */
generator->stack->top = EG(vm_stack_top);
EG(current_execute_data) = original_execute_data; EG(current_execute_data) = original_execute_data;
EG(scope) = original_scope; EG(scope) = original_scope;
EG(vm_stack_top) = original_stack->top; EG(vm_stack_top) = original_stack->top;