Skip to content

PHP 8.6.0 TrueAsync alpha.1

Pre-release
Pre-release

Choose a tag to compare

@EdmondDantes EdmondDantes released this 21 Feb 14:24
· 3784 commits to master since this release

PHP 8.6.0 TrueAsync alpha.1

First alpha release of TrueAsync PHP 8.6.0.

This is a pre-release intended for testing. Do not use in production.


Changed

  • New \Cancellation root class — added to PHP core per the True Async RFC. Implements \Throwable alongside \Exception and \Error. Async\AsyncCancellation now extends \Cancellation instead of \Error, preventing cancellation exceptions from being accidentally caught by catch(\Exception) or catch(\Error) blocks.
    • Migration: Replace catch(Async\CancellationError $e) with catch(Async\AsyncCancellation $e) or catch(\Cancellation $e).

Fixed

  • stream_select() ignoring PHP-buffered data in async context — when fgets()/fread() pulled more data into PHP's internal buffer than returned, a subsequent stream_select() did not detect buffered data because the async path only checks OS-level file descriptors. Caused hangs in run-tests.php -j parallel workers on macOS. Fixed by checking stream_array_emulate_read_fd_set() before entering the async poll path.
  • Waker events not cleaned when coroutine is resumed outside scheduler context — stale event references could accumulate when a coroutine was resumed directly. Now ZEND_ASYNC_WAKER_CLEAN_EVENTS is called on resume outside the scheduler.

Related repositories