Skip to content

Commit 71f2d60

Browse files
committed
Merge branch 'PHP-8.2'
2 parents e8d16fd + 98b8d1c commit 71f2d60

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

Zend/tests/fibers/gh10496.phpt renamed to Zend/tests/fibers/gh10496-001.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
--TEST--
2-
Bug GH-10496 (Segfault when garbage collector is invoked inside of fiber)
2+
Bug GH-10496 001 (Segfault when garbage collector is invoked inside of fiber)
33
--FILE--
44
<?php
55

Zend/tests/fibers/gh10496-002.phpt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
--TEST--
2+
Bug GH-10496 002 (Segfault when garbage collector is invoked inside of fiber)
3+
--FILE--
4+
<?php
5+
6+
function pollute_stack_and_suspend($a = 1, $b = 2, $c = 3) {
7+
Fiber::suspend();
8+
}
9+
10+
$f = new Fiber(function() use (&$f) {
11+
pollute_stack_and_suspend();
12+
(function() {
13+
(function() {
14+
(new Fiber(function() {
15+
gc_collect_cycles();
16+
echo "Success\n";
17+
}))->start();
18+
})();
19+
})();
20+
});
21+
$f->start();
22+
$f->resume();
23+
24+
?>
25+
--EXPECT--
26+
Success

Zend/zend_fibers.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -743,7 +743,7 @@ static HashTable *zend_fiber_object_gc(zend_object *object, zval **table, int *n
743743
zend_get_gc_buffer_add_zval(buf, &fiber->fci.function_name);
744744
zend_get_gc_buffer_add_zval(buf, &fiber->result);
745745

746-
if (fiber->context.status != ZEND_FIBER_STATUS_SUSPENDED) {
746+
if (fiber->context.status != ZEND_FIBER_STATUS_SUSPENDED || fiber->caller != NULL) {
747747
zend_get_gc_buffer_use(buf, table, num);
748748
return NULL;
749749
}

0 commit comments

Comments
 (0)