diff --git a/.release-notes/next-release.md b/.release-notes/next-release.md index e69de29..bd50d79 100644 --- a/.release-notes/next-release.md +++ b/.release-notes/next-release.md @@ -0,0 +1,8 @@ + +## Fix potential connection hang when timer event subscription fails + +On some platforms, if the operating system cannot allocate resources for a connection timer (e.g., ENOMEM on kqueue or epoll), connections could hang silently instead of reporting an error. Timer subscription failures are now detected and reported as connection failures. + +## Require ponyc 0.63.1 or later + +github_rest_api now requires ponyc 0.63.1 or later. Older ponyc versions are no longer supported. diff --git a/CHANGELOG.md b/CHANGELOG.md index 70c1afb..3ab8ae5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,12 +6,14 @@ All notable changes to this project will be documented in this file. This projec ### Fixed +- Fix potential connection hang when timer event subscription fails ([PR #118](https://github.com/ponylang/github_rest_api/pull/118)) ### Added ### Changed +- Require ponyc 0.63.1 or later ([PR #118](https://github.com/ponylang/github_rest_api/pull/118)) ## [0.3.2] - 2026-04-07 diff --git a/README.md b/README.md index e224b22..d5d5f2b 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ Additional API surface and functionality will be added as needed. If you need fu ## Installation +* Requires ponyc 0.63.1 or later * Install [corral](https://github.com/ponylang/corral) * `corral add github.com/ponylang/github_rest_api.git --version 0.3.2` * `corral fetch` to fetch your dependencies diff --git a/corral.json b/corral.json index a2503ab..edb475e 100644 --- a/corral.json +++ b/corral.json @@ -10,7 +10,7 @@ }, { "locator": "github.com/ponylang/courier.git", - "version": "0.1.5" + "version": "0.2.0" }, { "locator": "github.com/ponylang/uri.git", diff --git a/github_rest_api/paginated_list.pony b/github_rest_api/paginated_list.pony index 9198803..92ec403 100644 --- a/github_rest_api/paginated_list.pony +++ b/github_rest_api/paginated_list.pony @@ -241,6 +241,7 @@ actor LinkedJsonRequester is courier.HTTPClientConnectionActor | courier.ConnectionFailedTCP => "Unable to connect" | courier.ConnectionFailedSSL => "SSL handshake failed" | courier.ConnectionFailedTimeout => "Connection timed out" + | courier.ConnectionFailedTimerError => "Connect timer failed" end _receiver.failure(0, "", consume msg) diff --git a/github_rest_api/request/check_requester.pony b/github_rest_api/request/check_requester.pony index c9d8507..3e408c3 100644 --- a/github_rest_api/request/check_requester.pony +++ b/github_rest_api/request/check_requester.pony @@ -118,6 +118,7 @@ actor CheckRequester is courier.HTTPClientConnectionActor | courier.ConnectionFailedTCP => "Unable to connect" | courier.ConnectionFailedSSL => "SSL handshake failed" | courier.ConnectionFailedTimeout => "Connection timed out" + | courier.ConnectionFailedTimerError => "Connect timer failed" end _receiver.failure(0, "", consume msg) diff --git a/github_rest_api/request/json_requester.pony b/github_rest_api/request/json_requester.pony index 2460dd8..9d59ad9 100644 --- a/github_rest_api/request/json_requester.pony +++ b/github_rest_api/request/json_requester.pony @@ -160,6 +160,7 @@ actor JsonRequester is courier.HTTPClientConnectionActor | courier.ConnectionFailedTCP => "Unable to connect" | courier.ConnectionFailedSSL => "SSL handshake failed" | courier.ConnectionFailedTimeout => "Connection timed out" + | courier.ConnectionFailedTimerError => "Connect timer failed" end _receiver.failure(0, "", consume msg) diff --git a/github_rest_api/request/no_content_requester.pony b/github_rest_api/request/no_content_requester.pony index 0c27a9d..10f457e 100644 --- a/github_rest_api/request/no_content_requester.pony +++ b/github_rest_api/request/no_content_requester.pony @@ -136,6 +136,7 @@ actor NoContentRequester is courier.HTTPClientConnectionActor | courier.ConnectionFailedTCP => "Unable to connect" | courier.ConnectionFailedSSL => "SSL handshake failed" | courier.ConnectionFailedTimeout => "Connection timed out" + | courier.ConnectionFailedTimerError => "Connect timer failed" end _receiver.failure(0, "", consume msg)