Skip to content

Stdlib: sem_get()/sem_acquire()/sem_release() — System V semaphores (ext/sysvsem parity) #3704

Closed

Description

@PurHur

Category

stdlib / runtime

Problem

PHP exposes System V semaphore IPC via sem_get(), sem_acquire(), sem_release(), and sem_remove(). Related shared-memory APIs are tracked in #3344 (shmop_*); message queues in #3666 (msg_*). This compiler implements none of the semaphore family (function_exists('sem_get') → false).

php-src reference

Repro (today)

<?php
var_dump(function_exists('sem_get'), function_exists('sem_acquire'));
$key = ftok(__FILE__, 'a');
$sem = @sem_get($key, 1);
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && php bin/vm.php repro.php'
php repro.php   # Zend (requires sysvsem extension enabled)
Engine sem_get
Zend PHP + ext/sysvsem resource semaphore
This compiler VM undefined function

Scope (this repo)

Layer Path
VM ext/sysvsem/ module (new) or ext/standard/ thin wrappers delegating to sem_* libc where available
Resource type register SysvSemaphore resource; document platforms without SysV IPC
Tests test/compliance/cases/stdlib/sem_acquire_release.phpt (skip if !function_exists('sem_get') on Zend in CI)
Matrix capability row; note VM-only v1

v1 subset: blocking sem_acquire($sem) only; document nowait / auto-release flags vs Zend.

Done when

  • sem_get + sem_acquire + sem_release callable on VM where host supports SysV sem
  • Two-process PHPT or documented manual repro: second acquire blocks until release
  • ./script/ci-fast.sh --filter sem_acquire green (or @group sysv skip when unavailable)

Related

Activity

  1. added
    enhancementNew feature or request
    phase-4:stdlibPhase 4 – stdlib for web apps
    area:vmVirtual machine
    implementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claim
    on May 30, 2026
  2. PurHur commented on Jul 14, 2026

    @PurHur
    OwnerAuthor

    claim: worker-lane-c — starting this run

  3. PurHur commented on Jul 14, 2026

    @PurHur
    OwnerAuthor

    Merged via #18776.

    Verification:

    php bin/vm.php -r 'var_dump(function_exists("sem_get"), function_exists("sem_acquire"));'
    # bool(true) bool(true)
    
    php bin/vm.php test/compliance/cases/stdlib/sem_acquire_release.phpt
    # fn / SysvSemaphore / acq / rel / done
    
    vendor/bin/phpunit --filter SysvSemBuiltinTest
    # OK (1 test, 1 assertion)

    Implementation: ext/sysvsem/ — host SysvSemaphore delegation (same pattern as ext/sysvshm). php-src ref: ext/sysvsem/sysvsem.c. JIT/AOT deferred (VM-only v1).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:vmVirtual machineenhancementNew feature or requestimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimphase-4:stdlibPhase 4 – stdlib for web apps

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions