A request-scoped cleanup barrier obtained from HTTP.Promise.completion/1.
Supported for HTTP/1 (including reuse) and HTTP/2 requests, manual/error redirects, and direct TCP or OTP TLS transport, including explicit HTTP and HTTPS proxies. HTTP proxies support HTTP/1 forwarding and HTTP/1 or HTTP/2 CONNECT tunnels to HTTPS origins. HTTPS proxies support HTTP/1 forwarding to HTTP origins, and OTP TLS CONNECT tunnels to HTTPS origins with independently verified proxy and origin TLS. Nested TLS with ExSSL and proxy h2c routes remain unsupported. Explicit ExSSL supports direct or pinned HTTPS HTTP/1 and HTTP/2, including reuse, and the proxy routes described above. Awaiting the Promise or monitoring its response stream alone does not establish request cleanup.
A finite timeout covers the entire wait. :ok confirms termination of tracked
request resources; {:error, :cleanup_pending} leaves cleanup in progress.
{:error, :cleanup_unconfirmed} means evidence was lost (for example, an
owner died without completing cleanup, or TLS setup failed before a socket
exposing its receiver/sender could be tracked). TCP closure and dial-worker
termination alone cannot confirm cleanup of those missing TLS processes.
Repeated and concurrent waits are safe
from any process. Success also requires the lifecycle tracker to terminate.
This is a logical resource barrier: it does not certify native timer, alias,
monitor, signal-buffer or deferred ERTS reclamation, allocator carriers, RSS,
kernel memory return, or remote receipt of request bytes.
Pooled completion confirms return of an HTTP/1 connection or release of the
HTTP/2 stream and reservation; healthy shared connections remain open.
Summary
Functions
Cancels this request and awaits cleanup using the same finite deadline.
Waits for cleanup with a finite timeout in milliseconds.
Types
@type result() :: :ok | {:error, :cleanup_pending | :cleanup_unconfirmed | {:unsupported_completion, atom()}}
@opaque t()
Functions
@spec abort_and_await(t(), non_neg_integer()) :: result()
Cancels this request and awaits cleanup using the same finite deadline.
@spec await(t(), non_neg_integer()) :: result()
Waits for cleanup with a finite timeout in milliseconds.