Function release [src]

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

Prototype

pub fn release(pool: *ConnectionPool, connection: *Connection) void

Parameters

pool: *ConnectionPoolconnection: *Connection

Source

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; }