Skip to content

Commit b9bca2d

Browse files
committed
Fix resetting ZEND_GENERATOR_IN_FIBER flag
Signed-off-by: Bob Weinand <[email protected]>
1 parent 81607a6 commit b9bca2d

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

Zend/tests/gh9916-012.phpt

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--TEST--
2+
Bug GH-9916 012 (Entering shutdown sequence with a fiber suspended in a Generator emits an unavoidable fatal error or crashes)
3+
--FILE--
4+
<?php
5+
6+
$gen = (function() {
7+
yield from (function() { yield; })();
8+
})();
9+
$fiber = new Fiber(function() use ($gen) {
10+
$gen->current();
11+
});
12+
$fiber->start();
13+
14+
?>
15+
==DONE==
16+
--EXPECT--
17+
==DONE==

Zend/zend_generators.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -747,7 +747,7 @@ ZEND_API void zend_generator_resume(zend_generator *orig_generator) /* {{{ */
747747
zend_observer_fcall_end(generator->execute_data, &generator->value);
748748
}
749749
}
750-
generator->flags &= ~ZEND_GENERATOR_CURRENTLY_RUNNING;
750+
generator->flags &= ~(ZEND_GENERATOR_CURRENTLY_RUNNING | ZEND_GENERATOR_IN_FIBER);
751751

752752
generator->frozen_call_stack = NULL;
753753
if (EXPECTED(generator->execute_data) &&
@@ -787,7 +787,6 @@ ZEND_API void zend_generator_resume(zend_generator *orig_generator) /* {{{ */
787787
goto try_again;
788788
}
789789

790-
generator->flags &= ~ZEND_GENERATOR_IN_FIBER;
791790
orig_generator->flags &= ~ZEND_GENERATOR_DO_INIT;
792791
}
793792
/* }}} */

0 commit comments

Comments
 (0)