From b9bca2dadb0d8d554615f944c3fbff6e0750d72d Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Mon, 30 Jan 2023 11:59:12 +0100 Subject: [PATCH] Fix resetting ZEND_GENERATOR_IN_FIBER flag Signed-off-by: Bob Weinand --- Zend/tests/gh9916-012.phpt | 17 +++++++++++++++++ Zend/zend_generators.c | 3 +-- 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 Zend/tests/gh9916-012.phpt diff --git a/Zend/tests/gh9916-012.phpt b/Zend/tests/gh9916-012.phpt new file mode 100644 index 00000000000..cd31ea1215b --- /dev/null +++ b/Zend/tests/gh9916-012.phpt @@ -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-- +current(); +}); +$fiber->start(); + +?> +==DONE== +--EXPECT-- +==DONE== diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 24316dc4e89..65feafc1b69 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -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; } /* }}} */