DoxigAlpha

release

Tries to release a connection back to the connection pool. If the connection is marked as closing, it will be closed instead.

Threadsafe.

Function parameters

Parameters

#
pool:*ConnectionPool
connection:*Connection

A Least-Recently-Used cache of open connections to be reused.

Types

#
ConnectionPool
A Least-Recently-Used cache of open connections to be reused.

Release all associated resources with the client.

Functions

#
deinit
Release all associated resources with the client.
initDefaultProxies
Populates `http_proxy` and `https_proxy` via standard proxy environment variables.
connectTcp
Reuses a `Connection` if one matching `host` and `port` is already open.
connectUnix
Connect to `path` as a unix domain socket.
connectProxied
Connect to `proxied_host:proxied_port` using the specified proxy with HTTP
connect
Connect to `host:port` using the specified protocol.
request
Open a connection to the host specified by `uri` and prepare to send a HTTP request.
fetch
Perform a one-shot HTTP request with the provided options.

Error sets in this namespace

Error Sets

#

= std.options.http_disable_tls

Values

#
disable_tls
= std.options.http_disable_tls

Source

Implementation

#
pub fn release(pool: *ConnectionPool, connection: *Connection) void {
    pool.mutex.lock();
    defer pool.mutex.unlock();

    pool.used.remove(&connection.pool_node);

    if (connection.closing or pool.free_size == 0) return connection.destroy();

    if (pool.free_len >= pool.free_size) {
        const popped: *Connection = @alignCast(@fieldParentPtr("pool_node", pool.free.popFirst().?));
        pool.free_len -= 1;

        popped.destroy();
    }

    if (connection.proxied) {
        // proxied connections go to the end of the queue, always try direct connections first
        pool.free.prepend(&connection.pool_node);
    } else {
        pool.free.append(&connection.pool_node);
    }

    pool.free_len += 1;
}