From 5a9cdd3cc89507d4d74f8bded56ce5e037b3b56e Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Fri, 23 Feb 2024 07:08:18 +0100 Subject: wip --- learn-you-some-erlang/pool/ppool_supersup.erl | 31 +++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 learn-you-some-erlang/pool/ppool_supersup.erl (limited to 'learn-you-some-erlang/pool/ppool_supersup.erl') diff --git a/learn-you-some-erlang/pool/ppool_supersup.erl b/learn-you-some-erlang/pool/ppool_supersup.erl new file mode 100644 index 0000000..5790c5f --- /dev/null +++ b/learn-you-some-erlang/pool/ppool_supersup.erl @@ -0,0 +1,31 @@ +-module(ppool_supersup). +-behaviour(supervisor). +-export([start_link/0, stop/0, start_pool/3, stop_pool/1]). +-export([init/1]). + +start_link() -> + supervisor:start_link({local, ppool}, ?MODULE, []). + +%% technically, a supervisor can not be killed in an easy way. +%% Let's do it brutally! +stop() -> + case whereis(ppool) of + P when is_pid(P) -> + exit(P, kill); + _ -> ok + end. + +start_pool(Name, Limit, MFA) -> + ChildSpec = {Name, + {ppool_sup, start_link, [Name, Limit, MFA]}, + permanent, 10500, supervisor, [ppool_sup]}, + supervisor:start_child(ppool, ChildSpec). + +stop_pool(Name) -> + supervisor:terminate_child(ppool, Name), + supervisor:delete_child(ppool, Name). + +init([]) -> + MaxRestart = 6, + MaxTime = 3000, + {ok, {{one_for_one, MaxRestart, MaxTime}, []}}. -- cgit v1.2.3