Packages
poolex
0.7.1
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.0
1.5.0-rc.0
1.4.2
1.4.1
1.4.0
1.3.0
1.2.1
1.2.0
1.1.0
1.0.0
1.0.0-rc.0
0.10.0
0.9.0
0.9.0-rc.2
0.9.0-rc.1
0.9.0-rc.0
0.8.0
0.8.0-rc.1
0.8.0-rc.0
0.7.6
0.7.5
0.7.4
retired
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.1
0.5.0
0.4.0
0.3.1
retired
0.3.0
retired
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
The library for managing pools of workers.
Current section
Files
Jump to
Current section
Files
lib/poolex/monitoring.ex
defmodule Poolex.Monitoring do
@moduledoc false
@type monitor_id() :: atom() | reference()
@type kind_of_process() :: :worker | :caller | :temporary_worker
@spec init(Poolex.pool_id()) :: {:ok, monitor_id()}
@doc false
def init(pool_id) do
monitor_id = :ets.new(:"#{pool_id}_references", [:set, :named_table, :private])
{:ok, monitor_id}
end
@spec stop(monitor_id()) :: :ok
@doc false
def stop(monitor_id) do
:ets.delete(monitor_id)
:ok
end
@spec add(monitor_id(), pid(), kind_of_process()) :: :ok
@doc false
def add(monitor_id, process_pid, kind_of_process) do
reference = Process.monitor(process_pid)
:ets.insert_new(monitor_id, {reference, process_pid, kind_of_process})
:ok
end
@spec remove(monitor_id(), reference()) :: kind_of_process()
@doc false
def remove(monitor_id, monitoring_reference) do
true = Process.demonitor(monitoring_reference)
[{_reference, _pid, kind_of_process}] = :ets.lookup(monitor_id, monitoring_reference)
true = :ets.delete(monitor_id, monitoring_reference)
kind_of_process
end
end