From 1870d9a5f40f488c8c2a3bcbb9aec155f5c570f5 Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Mon, 24 Jun 2019 20:12:59 +0200 Subject: init servers from config; cleanup on app stop --- p11p-daemon/src/p11p_app.erl | 9 +++++++-- p11p-daemon/src/p11p_server.erl | 1 - p11p-daemon/src/p11p_server_sup.erl | 30 ++++++++++++++++++++++-------- 3 files changed, 29 insertions(+), 11 deletions(-) (limited to 'p11p-daemon/src') diff --git a/p11p-daemon/src/p11p_app.erl b/p11p-daemon/src/p11p_app.erl index ad48080..56172d2 100644 --- a/p11p-daemon/src/p11p_app.erl +++ b/p11p-daemon/src/p11p_app.erl @@ -1,15 +1,20 @@ -module(p11p_app). -behaviour(application). --export([start/2, stop/1]). +-export([start/2, prep_stop/1, stop/1]). -include("p11p_defs.hrl"). -start(_Type, _Args) -> % Args from application spec (key 'p11p'?). +start(_Type, _Args) -> % Args from 'mod' in application spec. lager:notice("p11p version ~s starting", [p11p:version()]), {ok, Sup} = p11p_sup:start_link(), {ok, Sup}. +-spec prep_stop(term()) -> term(). +prep_stop(State) -> + p11p_server_sup:cleanup(), + State. + -spec stop([]) -> ok. stop(_State) -> ok. diff --git a/p11p-daemon/src/p11p_server.erl b/p11p-daemon/src/p11p_server.erl index c2422dc..faa22be 100644 --- a/p11p-daemon/src/p11p_server.erl +++ b/p11p-daemon/src/p11p_server.erl @@ -75,7 +75,6 @@ handle_info(Info, State) -> terminate(_Reason, #state{sockpath = _SocketPath, socket = Socket}) -> lager:debug("~p: ~p: terminated", [self(), Socket]), gen_tcp:close(Socket), - %%FIXME: clean up socket file where? file:delete(SocketPath), ok. code_change(_OldVersion, State, _Extra) -> 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() ]. -- cgit v1.1