Packages
sippet
0.4.4
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
An Elixir Session Initiation Protocol (SIP) stack.
Current section
Files
Jump to
Current section
Files
lib/sippet/transports/udp/pool.ex
defmodule Sippet.Transports.UDP.Pool do
@moduledoc """
This module defines the UDP senders' pool.
The objective is to block the caller case all worker processes are busy in
order to keep the system responsive.
"""
@doc """
Returns a `poolboy` child specification for a parent supervisor.
"""
@spec spec() :: Supervisor.Spec.spec
def spec() do
alias Sippet.Transports.UDP.Sender, as: Sender
defaults = [
size: System.schedulers_online(),
# overflow is generally useless, as workers
# will do busy processing
max_overflow: 0
]
Sippet.PoolboyUtil.child_spec(__MODULE__, Sender, defaults)
end
@doc """
Checks out a worker from the pool to send the message.
This operation is performed by `Sippet.Transports.UDP.Plug.send_message/4`.
While the calling process is responsible to check out a worker process, the
worker process will be responsible to check in itself once it becomes ready
for another message.
"""
@spec check_out() :: pid
def check_out(), do: Sippet.PoolboyUtil.check_out(__MODULE__)
@doc """
Checks in a worker back to the pool, becoming ready to send another message.
This operation is performed by `Sippet.Transports.UDP.Sender.handle_cast/2`.
While the calling process is responsible to check out a worker process, the
worker process will be responsible to check in itself once it becomes ready
for another message.
"""
@spec check_in(pid) :: :ok
def check_in(worker), do: Sippet.PoolboyUtil.check_in(__MODULE__, worker)
end