packages feed

semaphore-compat-2.0.1: changelog.md

### 2.0.1 (June 30, 2026)

- Fix a bug on Darwin where accepted fds would inherit O_NONBLOCK from the listen fd,
  causing subsequent reads on the server to fail instantly.
- Fix fds opened by `semaphore-compat` leaking across `exec`.
- Avoid leaking fds from stderr handles in the testsuite.
- Improve documentation
- Drop dependency on `exceptions`
- `releaseSemaphoreToken` is now idempotent on Windows.

### 2.0.0 (May 22, 2026)

- Major release introducing protocol v2:
    - On Linux and other POSIX platforms, the implementation now uses
      Unix domain sockets in place of POSIX named semaphores
      (`sem_open(3)`), avoiding the libc-ABI issues that affected the
      v1 implementation when a jobserver and its clients were built
      against different C standard libraries (see
      [GHC #25087](https://gitlab.haskell.org/ghc/ghc/-/issues/25087)
      and [cabal #9993](https://github.com/haskell/cabal/issues/9993)).
    - Windows is unaffected and continues to use Win32 named
      semaphores; its reported protocol version remains v1.
- API overhaul:
    - `Semaphore` has been renamed to `ClientSemaphore`.
    - `ServerSemaphore` is a new type representing the server-side
      identity of a semaphore, with full bookkeeping for crash
      recovery on POSIX.  Use `serverClientSemaphore` to recover the
      `ClientSemaphore` from a `ServerSemaphore`.
    - `SemaphoreToken` is a new type representing a single held token;
      `waitOnSemaphore` returns one and `releaseSemaphoreToken` (or
      `withSemaphoreToken`) releases one.
    - `SemaphoreName` is now a record carrying the protocol version
      alongside the unversioned name; use `semaphoreIdentifier` to derive
      the serialised name for transport between processes via flags like
      `-jsem`.
- `versionsAreCompatible :: SemaphoreProtocolVersion ->
  SemaphoreProtocolVersion -> Bool` exposed for use by jobservers
  (e.g. cabal-install) to detect protocol mismatches before invoking a
  jobclient (e.g. GHC).
- `waitOnSemaphore` is now interruptible: an asynchronous exception
  delivered while a thread is blocked on the semaphore aborts the wait
  safely.
- POSIX server-side crash recovery: when a client disconnects without
  explicitly returning its tokens, the server returns them to the pool
  automatically.  This is not available on Windows.

### 1.0.0 (March 13, 2023)

- First version of the `semaphore-compat` package.