Look at executing generator for fiber destructor behaviour

This commit is contained in:
Bob Weinand 2023-01-30 12:32:53 +01:00
parent b9bca2dadb
commit 00be6e1aed
3 changed files with 15 additions and 1 deletions

View file

@ -1,5 +1,12 @@
--TEST--
Fiber::getReturn() after bailout
--SKIPIF--
<?php
$zend_mm_enabled = getenv("USE_ZEND_ALLOC");
if ($zend_mm_enabled === "0") {
die("skip Zend MM disabled");
}
?>
--FILE--
<?php

View file

@ -2,6 +2,13 @@
Bug GH-9801 (Crash when memory limit is exceeded during generator initialization)
--INI--
memory_limit=16m
--SKIPIF--
<?php
$zend_mm_enabled = getenv("USE_ZEND_ALLOC");
if ($zend_mm_enabled === "0") {
die("skip Zend MM disabled");
}
?>
--FILE--
<?php

View file

@ -225,7 +225,7 @@ static void zend_generator_dtor_storage(zend_object *object) /* {{{ */
/* Generator is running in a suspended fiber.
* Will be dtor during fiber dtor */
if (generator->flags & ZEND_GENERATOR_IN_FIBER) {
if (zend_generator_get_current(generator)->flags & ZEND_GENERATOR_IN_FIBER) {
/* Prevent finally blocks from yielding */
generator->flags |= ZEND_GENERATOR_FORCED_CLOSE;
return;