FiberError
PHPERRORNotableConcurrency

Invalid Fiber operation (PHP 8.1+)

Quick Answer

Check $fiber->isTerminated() before resuming; only call Fiber::suspend() inside a running fiber.

What this means

Thrown (PHP 8.1+) when an invalid operation is performed on a Fiber — most commonly resuming a terminated fiber, starting an already-started fiber, or calling Fiber::suspend() outside a fiber.

Why it happens
  1. 1Calling $fiber->resume() on a fiber that has already returned or thrown
  2. 2Calling $fiber->start() on a fiber that is already running or suspended
  3. 3Calling Fiber::suspend() from outside a fiber context

Fix

Guard with status checks before operating

Guard with status checks before operating
$fiber = new Fiber(function (): void {
    $value = Fiber::suspend('first');
    echo "Resumed with: $value\n";
});

$first = $fiber->start();    // 'first'
$fiber->resume('hello');     // prints: Resumed with: hello

if (!$fiber->isTerminated()) {
    $fiber->resume('more');
} else {
    echo "Fiber already finished\n";
}

Why this works

isTerminated() returns true after the fiber function returns or throws. isStarted(), isSuspended(), and isRunning() give full lifecycle visibility.

Code examples
Fiber lifecycle methodsphp
$fiber->isStarted()     // true after start()
$fiber->isRunning()     // true while executing
$fiber->isSuspended()   // true after Fiber::suspend()
$fiber->isTerminated()  // true after return/throw
Sources

Content generated with AI assistance and reviewed for accuracy. Found an error? hello@errcodes.dev

← All PHP errors