@@ -35,8 +35,25 @@ defmodule Hound.SessionServer do
3535
3636
3737 def change_current_session_for_pid ( pid , session_name , opts ) do
38- { :ok , session_id } =
39- GenServer . call ( @ name , { :change_session , pid , session_name , opts } , 60000 )
38+ { :ok , driver_info } = Hound . driver_info
39+
40+ sessions =
41+ case :ets . lookup ( @ name , pid ) do
42+ [ { ^ pid , _session_id , sessions } ] ->
43+ sessions
44+ [ ] -> % { }
45+ end
46+
47+ { session_id , sessions } =
48+ case Map . fetch ( sessions , session_name ) do
49+ { :ok , session_id } ->
50+ { session_id , sessions }
51+ :error ->
52+ session_id = create_session ( driver_info , opts )
53+ { session_id , Map . put ( sessions , session_name , session_id ) }
54+ end
55+
56+ :ok = GenServer . call ( @ name , { :register , pid , session_id , sessions } , 60000 )
4057 session_id
4158 end
4259
@@ -66,29 +83,9 @@ defmodule Hound.SessionServer do
6683 end
6784
6885
69- def handle_call ( { :change_session , pid , session_name , opts } , _from , state ) do
70- { :ok , driver_info } = Hound . driver_info
71-
72- sessions =
73- case :ets . lookup ( @ name , pid ) do
74- [ { ^ pid , _session_id , sessions } ] ->
75- sessions
76- [ ] -> % { }
77- end
78-
79- { session_id , sessions } =
80- case Map . fetch ( sessions , session_name ) do
81- { :ok , session_id } ->
82- { session_id , sessions }
83- :error ->
84- session_id = create_session ( driver_info , opts )
85- { session_id , Map . put ( sessions , session_name , session_id ) }
86- end
87-
86+ def handle_call ( { :register , pid , session_id , sessions } , _from , state ) do
8887 :ets . insert ( @ name , { pid , session_id , sessions } )
89- { :reply , { :ok , session_id } , monitor_session ( pid , state ) }
90- rescue
91- error -> { :reply , { :error , error } , state }
88+ { :reply , :ok , monitor_session ( pid , state ) }
9289 end
9390
9491 def handle_call ( { :destroy_sessions , pid } , _from , state ) do
0 commit comments