Skip to content

Commit 811b3e5

Browse files
committed
Don't keep session monitor ref in :ets
1 parent d95f8b5 commit 811b3e5

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

lib/hound/session_server.ex

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ defmodule Hound.SessionServer do
1717

1818
def current_session_id(pid) do
1919
case :ets.lookup(@name, pid) do
20-
[{^pid, _ref, session_id, _all_sessions}] -> session_id
20+
[{^pid, session_id, _all_sessions}] -> session_id
2121
[] -> nil
2222
end
2323
end
2424

2525
def current_session_name(pid) do
2626
case :ets.lookup(@name, pid) do
27-
[{^pid, _ref, session_id, all_sessions}] ->
27+
[{^pid, session_id, all_sessions}] ->
2828
Enum.find_value all_sessions, fn
2929
{name, id} when id == session_id -> name
3030
_ -> nil
@@ -43,14 +43,14 @@ defmodule Hound.SessionServer do
4343

4444
def all_sessions_for_pid(pid) do
4545
case :ets.lookup(@name, pid) do
46-
[{^pid, _ref, _session_id, all_sessions}] -> all_sessions
46+
[{^pid, _session_id, all_sessions}] -> all_sessions
4747
[] -> %{}
4848
end
4949
end
5050

5151

5252
def all_sessions do
53-
:ets.foldl(fn {_pid, _ref, _session_id, sessions}, acc -> acc ++ Map.values(sessions) end, [], @name)
53+
:ets.foldl(fn {_pid, _session_id, sessions}, acc -> acc ++ Map.values(sessions) end, [], @name)
5454
end
5555

5656

@@ -69,12 +69,11 @@ defmodule Hound.SessionServer do
6969
def handle_call({:change_session, pid, session_name, opts}, _from, state) do
7070
{:ok, driver_info} = Hound.driver_info
7171

72-
{ref, sessions} =
72+
sessions =
7373
case :ets.lookup(@name, pid) do
74-
[{^pid, ref, _session_id, sessions}] ->
75-
{ref, sessions}
76-
[] ->
77-
{Process.monitor(pid), %{}}
74+
[{^pid, _session_id, sessions}] ->
75+
sessions
76+
[] -> %{}
7877
end
7978

8079
{session_id, sessions} =
@@ -86,8 +85,8 @@ defmodule Hound.SessionServer do
8685
{session_id, Map.put(sessions, session_name, session_id)}
8786
end
8887

89-
:ets.insert(@name, {pid, ref, session_id, sessions})
90-
{:reply, {:ok, session_id}, Map.put(state, ref, pid)}
88+
:ets.insert(@name, {pid, session_id, sessions})
89+
{:reply, {:ok, session_id}, monitor_session(pid, state)}
9190
rescue
9291
error -> {:reply, {:error, error}, state}
9392
end
@@ -104,6 +103,15 @@ defmodule Hound.SessionServer do
104103
{:noreply, state}
105104
end
106105

106+
defp monitor_session(pid, state) do
107+
if state |> Map.values |> Enum.member?(pid) do
108+
state
109+
else
110+
ref = Process.monitor(pid)
111+
Map.put(state, ref, pid)
112+
end
113+
end
114+
107115
defp create_session(driver_info, opts) do
108116
case Hound.Session.create_session(driver_info[:browser], opts) do
109117
{:ok, session_id} -> session_id

0 commit comments

Comments
 (0)