Fix resetting ZEND_GENERATOR_IN_FIBER flag

Signed-off-by: Bob Weinand <bobwei9@hotmail.com>
This commit is contained in:
Bob Weinand 2023-01-30 11:59:12 +01:00
parent 81607a62ca
commit b9bca2dadb
2 changed files with 18 additions and 2 deletions

View File

@ -0,0 +1,17 @@
--TEST--
Bug GH-9916 012 (Entering shutdown sequence with a fiber suspended in a Generator emits an unavoidable fatal error or crashes)
--FILE--
<?php
$gen = (function() {
yield from (function() { yield; })();
})();
$fiber = new Fiber(function() use ($gen) {
$gen->current();
});
$fiber->start();
?>
==DONE==
--EXPECT--
==DONE==

View File

@ -747,7 +747,7 @@ try_again:
zend_observer_fcall_end(generator->execute_data, &generator->value);
}
}
generator->flags &= ~ZEND_GENERATOR_CURRENTLY_RUNNING;
generator->flags &= ~(ZEND_GENERATOR_CURRENTLY_RUNNING | ZEND_GENERATOR_IN_FIBER);
generator->frozen_call_stack = NULL;
if (EXPECTED(generator->execute_data) &&
@ -787,7 +787,6 @@ try_again:
goto try_again;
}
generator->flags &= ~ZEND_GENERATOR_IN_FIBER;
orig_generator->flags &= ~ZEND_GENERATOR_DO_INIT;
}
/* }}} */