summaryrefslogtreecommitdiff
path: root/p11p-daemon/src/p11p_remote_manager.erl
diff options
context:
space:
mode:
Diffstat (limited to 'p11p-daemon/src/p11p_remote_manager.erl')
-rw-r--r--p11p-daemon/src/p11p_remote_manager.erl37
1 files changed, 19 insertions, 18 deletions
diff --git a/p11p-daemon/src/p11p_remote_manager.erl b/p11p-daemon/src/p11p_remote_manager.erl
index 0acec66..8ff8883 100644
--- a/p11p-daemon/src/p11p_remote_manager.erl
+++ b/p11p-daemon/src/p11p_remote_manager.erl
@@ -56,11 +56,11 @@ start_link() ->
-spec remote_for_token(string()) -> pid().
remote_for_token(TokName) ->
gen_server:call(?MODULE, {remote_for_token, TokName}).
-client_event(Change, Args) ->
- gen_server:call(?MODULE, {client_event, Change, Args}).
+client_event(Event, Args) ->
+ gen_server:cast(?MODULE, {client_event, Event, Args}).
-server_event(Change, Args) ->
- gen_server:call(?MODULE, {server_event, Change, Args}).
+server_event(Event, Args) ->
+ gen_server:cast(?MODULE, {server_event, Event, Args}).
%% Genserver callbacks.
init([]) ->
@@ -80,9 +80,13 @@ handle_call({remote_for_token, TokName}, _From, #state{tokens = Tokens} = State)
_ ->
{reply, Pid, State}
end;
-handle_call({server_event, timeout, [TokName, Server]}, _From, #state{tokens = Tokens} = State) ->
- lager:debug("~p: ~s: timed out", [self(), TokName]),
- gen_server:stop(Server), % Hang up p11 client.
+handle_call(Call, _From, State) ->
+ lager:debug("Unhandled call: ~p~n", [Call]),
+ {reply, unhandled, State}.
+
+handle_cast({server_event, timeout, [TokName, Server]}, #state{tokens = Tokens} = State) ->
+ lager:debug("~p: ~s: timed out, stopping ~p", [self(), TokName, Server]),
+ gen_server:stop(Server), % Hang up on p11 client.
%% TODO: do some code dedup with remote_for_token?
#{TokName := Token} = Tokens,
Remotes = Token#token.remotes,
@@ -91,10 +95,10 @@ handle_call({server_event, timeout, [TokName, Server]}, _From, #state{tokens = T
NewToken = Token#token{remotes = tl(Remotes) ++ [NewRemote]},
NewState = State#state{tokens = Tokens#{TokName := NewToken}},
lager:debug("~p: ~s: updated token: ~p", [self(), TokName, NewToken]),
- {reply, ok, NewState};
-handle_call({client_event, client_gone, [TokName, Pid]}, From, #state{tokens = Tokens} = State) ->
- lager:debug("~p: killing off remote ~p on request from ~p", [self(), Pid, From]),
- gen_server:stop(Pid),
+ {noreply, NewState};
+handle_cast({client_event, client_gone, [TokName, Pid]}, #state{tokens = Tokens} = State) ->
+ lager:debug("~p: asking remote ~p to stop", [self(), Pid]),
+ p11p_remote:stop(Pid, normal),
#{TokName := Token} = Tokens,
Remotes = Token#token.remotes,
NewRemotes = [case E#remote.pid of
@@ -103,18 +107,15 @@ handle_call({client_event, client_gone, [TokName, Pid]}, From, #state{tokens = T
end || E <- Remotes],
NewToken = Token#token{remotes = NewRemotes},
NewState = State#state{tokens = Tokens#{TokName := NewToken}},
- {reply, ok, NewState};
-handle_call(Call, _From, State) ->
- lager:debug("Unhandled call: ~p~n", [Call]),
- {reply, unhandled, State}.
-
+ {noreply, NewState};
handle_cast(Cast, State) ->
lager:debug("Unhandled cast: ~p~n", [Cast]),
{noreply, State}.
handle_info({Port, {exit_status, Status}}, State) ->
- lager:info("~p: process exited with ~p", [Port, Status]),
- {stop, child_exit, State};
+ %% FIXME: do we need to be trapping exits explicitly?
+ lager:info("~p: process ~p exited with ~p", [self(), Port, Status]),
+ {noreply, State};
handle_info(Info, State) ->
lager:debug("~p: Unhandled info: ~p~n", [self(), Info]),
{noreply, State}.