File tree 3 files changed +41
-2
lines changed
src/Symfony/Component/Process 3 files changed +41
-2
lines changed Original file line number Diff line number Diff line change 1
1
CHANGELOG
2
2
=========
3
3
4
+ 5.4
5
+ ---
6
+
7
+ * added support for ` Fiber `
8
+
4
9
5.2.0
5
10
-----
6
11
Original file line number Diff line number Diff line change @@ -427,12 +427,22 @@ public function wait(callable $callback = null)
427
427
do {
428
428
$ this ->checkTimeout ();
429
429
$ running = '\\' === \DIRECTORY_SEPARATOR ? $ this ->isRunning () : $ this ->processPipes ->areOpen ();
430
- $ this ->readPipes ($ running , '\\' !== \DIRECTORY_SEPARATOR || !$ running );
430
+
431
+ if (\PHP_VERSION_ID >= 80100 && $ fiber = \Fiber::getCurrent ()) {
432
+ $ this ->readPipes (false , '\\' !== \DIRECTORY_SEPARATOR || !$ running );
433
+ $ fiber ->suspend ();
434
+ } else {
435
+ $ this ->readPipes ($ running , '\\' !== \DIRECTORY_SEPARATOR || !$ running );
436
+ }
431
437
} while ($ running );
432
438
433
439
while ($ this ->isRunning ()) {
434
440
$ this ->checkTimeout ();
435
- usleep (1000 );
441
+ if (\PHP_VERSION_ID >= 80100 && $ fiber = \Fiber::getCurrent ()) {
442
+ $ fiber ->suspend ();
443
+ } else {
444
+ usleep (1000 );
445
+ }
436
446
}
437
447
438
448
if ($ this ->processInformation ['signaled ' ] && $ this ->processInformation ['termsig ' ] !== $ this ->latestSignal ) {
Original file line number Diff line number Diff line change @@ -550,6 +550,30 @@ public function testMustRun()
550
550
$ this ->assertEquals ('foo ' .\PHP_EOL , $ process ->getOutput ());
551
551
}
552
552
553
+ /**
554
+ * @requires PHP 8.1
555
+ */
556
+ public function testMustRunWithFiber ()
557
+ {
558
+ $ process = new Process (['sleep ' , 1 ]);
559
+ $ fiber = new \Fiber (function () use ($ process ) {
560
+ $ process ->mustRun ();
561
+ });
562
+ $ fiber ->start ();
563
+
564
+ $ fiberHasBeenSuspended = false ;
565
+ while (!$ fiber ->isTerminated ()) {
566
+ $ fiberHasBeenSuspended = true ;
567
+ $ this ->assertTrue ($ fiber ->isSuspended ());
568
+ $ fiber ->resume ();
569
+
570
+ usleep (100000 );
571
+ }
572
+
573
+ $ this ->assertTrue ($ process ->isTerminated ());
574
+ $ this ->assertTrue ($ fiberHasBeenSuspended );
575
+ }
576
+
553
577
public function testSuccessfulMustRunHasCorrectExitCode ()
554
578
{
555
579
$ process = $ this ->getProcess ('echo foo ' )->mustRun ();
You can’t perform that action at this time.
0 commit comments