diff options
author | Linus Nordberg <linus@sunet.se> | 2019-06-24 20:12:59 +0200 |
---|---|---|
committer | Linus Nordberg <linus@sunet.se> | 2019-06-24 20:12:59 +0200 |
commit | 1870d9a5f40f488c8c2a3bcbb9aec155f5c570f5 (patch) | |
tree | 29115ade7293280b1b7d7499e6009813f403a60a /p11p-daemon/src/p11p_server_sup.erl | |
parent | d8c774d3665f66aff93be2fd717b032308af4651 (diff) |
init servers from config; cleanup on app stop
Diffstat (limited to 'p11p-daemon/src/p11p_server_sup.erl')
-rw-r--r-- | p11p-daemon/src/p11p_server_sup.erl | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/p11p-daemon/src/p11p_server_sup.erl b/p11p-daemon/src/p11p_server_sup.erl index 18f1247..064de05 100644 --- a/p11p-daemon/src/p11p_server_sup.erl +++ b/p11p-daemon/src/p11p_server_sup.erl @@ -2,20 +2,29 @@ -behaviour(supervisor). -export([start_link/0, start_server/1]). --export([init/1]). +-export([init/1, cleanup/0]). + +-include("p11p_defs.hrl"). start_link() -> supervisor:start_link({local, ?MODULE}, ?MODULE, []). init([]) -> - Names = ["vtoken0", "vtoken1"], % FIXME: get from config - ok = start_servers(Names), + ok = start_servers(tokens()), {ok, {{simple_one_for_one, 1, 5}, - [{sock_server, % Ignored childspec id. + [{sock_server, {p11p_server, start_link, []}, temporary, 1000, worker, [p11p_server]} ]}}. +start_server(Args) -> + {ok, Pid} = supervisor:start_child(?MODULE, [Args]), + Pid. + +cleanup() -> + cleanup(tokens()). + +%% Private functions. start_servers([]) -> ok; start_servers([Name|T]) -> @@ -26,11 +35,12 @@ start_servers([Name|T]) -> spawn_link(?MODULE, start_server, [[Path, Socket]]), start_servers(T). -start_server(Args) -> - {ok, Pid} = supervisor:start_child(?MODULE, [Args]), - Pid. +cleanup([]) -> + ok; +cleanup([Token|Tail]) -> + file:delete(socket_path(mkdir_socket_basepath(), Token)), + cleanup(Tail). -%% Private functions. mkdir_socket_basepath() -> %%"/run/user/$UNIXUID/p11p/$TokenCfg-$UNIXPID" EUID = "1000", % FIXME: get euid @@ -47,3 +57,7 @@ mkdir_socket_basepath() -> -spec socket_path(string(), string()) -> string(). socket_path(BasePath, Name) -> BasePath ++ Name ++ "-" ++ os:getpid(). % FIXME: filename(3erl) + +-spec tokens() -> [string()]. +tokens() -> + [ T#token.name || T <- p11p_config:tokens() ]. |