[prev in list] [next in list] [prev in thread] [next in thread]
List: php-cvs
Subject: [PHP-CVS] [php-src] fix-in-fiber-reset: Fix resetting ZEND_GENERATOR_IN_FIBER flag
From: Bob Weinand <noreply () php ! net>
Date: 2023-01-30 10:59:01
Message-ID: PyrxMwbLpXTKTqcqj3YUNP4jE7OHtLpVU01f9IkQQ () main ! php ! net
[Download RAW message or body]
Author: Bob Weinand (bwoebi)
Date: 2023-01-30T11:59:12+01:00
Commit: https://github.com/php/php-src/commit/6fec12581eed58c370bdfd148f704cf684c4683b
Raw diff: https://github.com/php/php-src/commit/6fec12581eed58c370bdfd148f704cf684c4683b.diff
Fix resetting ZEND_GENERATOR_IN_FIBER flag
Signed-off-by: Bob Weinand <bobwei9@hotmail.com>
Changed paths:
A Zend/tests/gh9916-012.phpt
M Zend/zend_generators.c
Diff:
diff --git a/Zend/tests/gh9916-012.phpt b/Zend/tests/gh9916-012.phpt
new file mode 100644
index 000000000000..1d32d92f27cd
--- /dev/null
+++ b/Zend/tests/gh9916-012.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug GH-9916 001 (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==
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index 6997d95af039..eb74563e9c02 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -761,7 +761,7 @@ ZEND_API void zend_generator_resume(zend_generator \
*orig_generator) /* {{{ */ 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) &&
@@ -801,7 +801,6 @@ ZEND_API void zend_generator_resume(zend_generator \
*orig_generator) /* {{{ */ goto try_again;
}
- generator->flags &= ~ZEND_GENERATOR_IN_FIBER;
orig_generator->flags &= ~ZEND_GENERATOR_DO_INIT;
}
/* }}} */
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic