You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
asciinema.org/lib/asciinema/vt/pool.ex

35 lines
733 B
Elixir

defmodule Asciinema.Vt.Pool do
use Supervisor
def start_link do
Supervisor.start_link(__MODULE__, [])
end
def init([]) do
supervise([
:poolboy.child_spec(:vt_pool, pool_config())
], strategy: :one_for_one, name: __MODULE__)
end
def checkout(f, timeout \\ 5_000) do
:poolboy.transaction(:vt_pool, fn worker ->
try do
f.(worker)
catch :exit, reason ->
Process.exit(worker, :kill)
case reason do
{:timeout, _} -> {:error, :timeout}
_ -> {:error, :unknown}
end
end
end, timeout)
end
defp pool_config do
[name: {:local, :vt_pool},
worker_module: Asciinema.Vt.Worker,
size: 2,
max_overflow: 0]
end
end