Skip to content

Commit bf3fbc8

Browse files
committed
+ Fiber remains suspended after manager fiber terminates (event loop scenario)
1 parent 1e0189c commit bf3fbc8

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
--TEST--
2+
Fiber remains suspended after manager fiber terminates (event loop scenario)
3+
--FILE--
4+
<?php
5+
6+
echo "Test: Suspended worker fiber after manager terminates\n";
7+
8+
// Worker fiber with infinite loop (like Revolt's callbackFiber)
9+
$workerFiber = new Fiber(function() {
10+
echo "Worker: started\n";
11+
do {
12+
echo "Worker: processing\n";
13+
Fiber::suspend(); // Wait for next work
14+
echo "Worker: resumed\n";
15+
} while (true); // Infinite loop
16+
});
17+
18+
// Manager fiber that controls worker (like Revolt's loop fiber)
19+
$managerFiber = new Fiber(function() use ($workerFiber) {
20+
echo "Manager: starting worker\n";
21+
$workerFiber->start();
22+
23+
echo "Manager: resuming worker once\n";
24+
$workerFiber->resume();
25+
26+
echo "Manager: no more work, terminating\n";
27+
// Manager terminates here, leaving worker suspended
28+
return "done";
29+
});
30+
31+
echo "Starting manager\n";
32+
$result = $managerFiber->start();
33+
34+
echo "Manager terminated with: $result\n";
35+
echo "Worker is: " . ($workerFiber->isSuspended() ? "suspended" : "other") . "\n";
36+
37+
echo "Test completed\n";
38+
?>
39+
--EXPECT--
40+
Test: Suspended worker fiber after manager terminates
41+
Starting manager
42+
Manager: starting worker
43+
Worker: started
44+
Worker: processing
45+
Manager: resuming worker once
46+
Worker: resumed
47+
Worker: processing
48+
Manager: no more work, terminating
49+
Manager terminated with: done
50+
Worker is: suspended
51+
Test completed

0 commit comments

Comments
 (0)